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 compact compressed 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. Opens both packages databases from spam db build and index databases from spam index.

§File format

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

# spam-db-v3\tindex\n
[one zstd-compressed package stream]

options and packages are bucket-indexed. index is a package-grouped stream with prefix-delta encoded paths.

§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(", "));
        }
    }
    SpamDb::Index(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 returned by SpamDb::open when the kind is not known at compile time.

Type Aliases§

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