Skip to main content

Crate spam_db

Crate spam_db 

Source
Expand description

Parser and query library for spam databases.

spam indexes Nix package closures and nixosOptionsDoc output into compressed, bucket-indexed databases. Use this crate to open those databases and run substring queries against them.

§Database kinds

  • OptionsDb: NixOS module options, keyed by option name.
  • PackagesDb: Nix store file paths, keyed by path.

§File format

# spam-db-v2\t{options|packages}\n
[256 x 16-byte index entries: (offset: u64le, length: u64le)]
[concatenated zstd-compressed bucket blobs]

Each line is placed in every bucket for each unique byte in its search key. Queries decompress only the bucket for query[0].

§Usage

use spam_db::SpamDb;

match SpamDb::open("files.db").unwrap() {
    SpamDb::Options(db) => {
        for rec in db.query("services.nginx").unwrap() {
            println!("{}: {:?}", rec.name, rec.summary);
        }
    }
    SpamDb::Packages(db) => {
        for rec in db.query("/bin/").unwrap() {
            println!("{} -> {}", rec.path, rec.packages.join(", "));
        }
    }
}
use spam_db::OptionsDb;

let db = OptionsDb::open("options.db").unwrap();
let results = db.query("networking.firewall").unwrap();

Re-exports§

pub use error::Error;
pub use options::OptionRecord;
pub use options::OptionsDb;
pub use packages::FileKind;
pub use packages::FileRecord;
pub use packages::PackagesDb;

Modules§

error
options
packages

Enums§

DbKind
Whether a spam database stores NixOS module options or package file paths.
SpamDb
A spam database of either kind, returned by SpamDb::open when the kind is not known at compile time.

Type Aliases§

Result
Convenience alias for Result<T, spam_db::Error>.