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
- Register a new search provider
- Implement the
SearchProviderImpl
trait for the struct that holds your Application. - Once the application is installed, enable it in GNOME Settings -> Search.
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<_>>()
}
}
- Create an instance of
SearchProvider
ⓘ
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§
- A struct wrapping the required information to re-construct an icon with
gdk-pixbuf
. - Detailed information of a
ResultID
. - Create an instance of
ResultMeta
. - The main entry for using the search-provider crate.
Traits§
- A trait to implement to communicate with the search provider interface.
Type Aliases§
- A result identifier.