Expand description
Read-only parser for IBM / HCL Lotus Notes Storage Facility (NSF) databases. Pure Rust, no FFI, no Notes client required.
Current capability surface:
- File-shape identification (
detect) - Database header parsing (
header::DbHeader) - ODS version, database id, encryption flag, template flag, BDB position - Database information extension block 2 parsing
(
info2::Information2) - 4 superblock positions + 2 BDB positions- bucket-size knobs
- Superblock header parsing (
superblock::Superblock) plus freshest-of-4-copies selection (superblock::select_freshest) - Bucket header parsing (
bucket::BucketHeader) + RRV bucket header- per-entry decoder (
rrv::RrvIter)
- per-entry decoder (
- Note record header parsing (
note::NoteHeader) with class catalogue + UNID composition - High-level
database::Databasehandle with data-RRV walking - Bucket Descriptor Block parsing (
bdb::BucketDescriptorBlock) - the master index of every RRV bucket - Multi-page summary bucket-descriptor map + bucket-slot resolution
(
database::Database::resolve_bucket_slot) and identity-gated full-database note enumeration (database::Database::enumerate_notes) (Slice 2.6 Phase B.2) - Per-note item parsing with real field names + authoritative typing
(
item::NoteItem,item::FieldKind) sourced from the BDB Unique Name Key table - CD-record stream walking for rich-text bodies + OBJECT-item attachment
extraction (
cd::NoteContent,database::Database::note_content) - TIMEDATE timestamp parsing (
time::Timedate) - ODS version mapping (
ods::Ods)
Coming in subsequent slices:
- Form-based dispatch (Memo / Person / Appointment / …)
- Item-level encryption decryption (detected + flagged today)
See the project README for current capability status and the
companion priorart_nsf_format.md for the design rationale and
format reference.
§Versioning
This crate is pre-1.0 and under active development. Public API may break between 0.x releases as format coverage grows.
Re-exports§
pub use bdb::BucketDescriptorBlock;pub use bdb::RrvBucketDescriptor;pub use bdb::RrvBucketKind;pub use cd::Attachment;pub use cd::AttachmentKind;pub use cd::NoteContent;pub use bdt::BucketDescriptorTable;pub use bucket::Bucket;pub use bucket::BucketHeader;pub use bucket::BucketSlot;pub use database::Database;pub use database::NoteEnumeration;pub use database::ResolvedNote;pub use detect::identify_file;pub use detect::FileKind;pub use error::NsfError;pub use header::DbHeader;pub use info2::BdbSlot;pub use info2::Information2;pub use info2::SuperblockSlot;pub use item::field_kind;pub use item::parse_items;pub use item::FieldKind;pub use item::NoteItem;pub use note::NoteHeader;pub use ods::Ods;pub use rrv::RrvBucketHeader;pub use rrv::RrvEntry;pub use rrv::RrvIter;pub use rrv::RrvLocation;pub use superblock::select_freshest;pub use superblock::Superblock;pub use time::DecodedTimedate;pub use time::Timedate;
Modules§
- bdb
- Bucket Descriptor Block (BDB) - the master index of every RRV bucket.
- bdt
- Bucket Descriptor Table (BDT) - the
bucket_index -> file_offsetmap. - bucket
- Generic bucket (and bucket-shaped page) parsing.
- cd
- Composite Data (CD) record parsing - Lotus Notes rich text + attachments.
- cx
- Domino “CX” decompression - used for the superblock body.
- database
- High-level
Database::openAPI. - detect
- File-identification: tell an NSF from a non-NSF without committing to parsing the rest of the database.
- error
- Error taxonomy for the parser.
- header
- Database header (DBINFO) parsing.
- info2
- Database information extension block 2 (
nsfdb_database_information2_t). - item
- Note item parsing - the fields inside a note record.
- note
- Note record parsing.
- ods
- On-Disk Structure (ODS) version mapping.
- rrv
- Record Relocation Vector (RRV) bucket parsing.
- superblock
- Superblock parsing.
- time
- Notes
TIMEDATE(8-byte timestamp) parsing.