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