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§
Enums§
- DbKind
- Whether a spam database stores NixOS module options or package file paths.
- SpamDb
- A spam database of either kind, returned by
SpamDb::openwhen the kind is not known at compile time.
Type Aliases§
- Result
- Convenience alias for
Result<T, spam_db::Error>.