#search #gnome #provider #dbus

search-provider

Rust wrapper around the GNOME Shell search provider API

12 releases (7 breaking)

0.8.1 Feb 22, 2024
0.7.0 Feb 4, 2024
0.6.0 Jul 24, 2023
0.5.2 Mar 25, 2023
0.1.0 May 6, 2019

#572 in GUI

Download history 154/week @ 2023-12-18 94/week @ 2023-12-25 195/week @ 2024-01-01 142/week @ 2024-01-08 106/week @ 2024-01-15 140/week @ 2024-01-22 98/week @ 2024-01-29 94/week @ 2024-02-05 283/week @ 2024-02-12 388/week @ 2024-02-19 204/week @ 2024-02-26 146/week @ 2024-03-04 243/week @ 2024-03-11 153/week @ 2024-03-18 113/week @ 2024-03-25 270/week @ 2024-04-01

803 downloads per month
Used in 2 crates

GPL-3.0-or-later

19KB
296 lines

search-provider

Rust wrapper around the GNOME Shell search provider API


lib.rs:

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(())
}

Dependencies

~9–23MB
~344K SLoC