Crate search_provider

source ·
Expand description

The crate aims to provide an easy to use wrapper around the GNOME Shell Search Provider DBus interface.

How to use

use search_provider::{ResultID, ResultMeta, SearchProviderImpl};
use std::collections::HashMap;

#[derive(Debug)]
struct Application {
    results: HashMap<String, String>,
}
impl SearchProviderImpl for Application {
    fn activate_result(&self, identifier: ResultID, terms: &[String], timestamp: u32) {
        let result = self.results.get(&identifier);
        println!(
            "activating result {:#?} identified by {}",
            result, identifier
        );
    }

    fn initial_result_set(&self, terms: &[String]) -> Vec<ResultID> {
        // Here do your search logic
        if terms.contains(&"some_value".to_owned()) {
            vec!["some_key".to_owned()]
        } else {
            vec![]
        }
    }

    fn result_metas(&self, identifiers: &[ResultID]) -> Vec<ResultMeta> {
        self.results
            .iter()
            .map(|(identifier, value)| {
                ResultMeta::builder(identifier.to_owned(), "Some name")
                    .description("Some description of the current identifier")
                    .build()
            })
            .collect::<Vec<_>>()
    }
}
use search_provider::SearchProvider;
use std::collections::HashMap;

async fn main_entry() -> zbus::Result<()> {
    let mut results = HashMap::new();
    results.insert("some_key".to_string(), "some_value".to_string());
    let app = Application { results };
    let provider = SearchProvider::new(
        app,
        "org.gnome.design.IconLibrary.SearchProvider",
        "/org/gnome/design/IconLibrary/SearchProvider",
    )
    .await?;
    Ok(())
}

Structs

Traits

Type Aliases