14 releases (9 breaking)

0.11.0 Feb 15, 2025
0.10.0 Jul 10, 2024
0.8.1 Feb 22, 2024
0.6.0 Jul 24, 2023
0.1.0 May 6, 2019

#1292 in GUI

Download history 42/week @ 2024-12-21 67/week @ 2024-12-28 57/week @ 2025-01-04 174/week @ 2025-01-11 30/week @ 2025-01-18 23/week @ 2025-01-25 73/week @ 2025-02-01 112/week @ 2025-02-08 213/week @ 2025-02-15 83/week @ 2025-02-22 132/week @ 2025-03-01 30/week @ 2025-03-08 203/week @ 2025-03-15 110/week @ 2025-03-22 78/week @ 2025-03-29 37/week @ 2025-04-05

439 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

~6–19MB
~299K SLoC