pub struct Descriptor {
pub universe: String,
pub source_format: u8,
pub format_basis: String,
pub models: Vec<EntropyModel>,
pub channels: Vec<EntropyChannelDescriptor>,
pub objects: Vec<ObjectSource>,
pub program: Program,
pub observation_index: Option<ObservationIndex>,
pub seek_directory: bool,
pub source_sha256: [u8; 32],
pub source_len: u64,
}Expand description
The in-memory model of a .voldoc descriptor.
Fields§
§universe: StringUniverse declaration string.
source_format: u8Source-format class selector.
format_basis: StringHuman-readable basis for the format decision (provenance, not trust).
models: Vec<EntropyModel>Canonical entropy models referenced by channels.
channels: Vec<EntropyChannelDescriptor>Typed entropy channels referenced by the program.
objects: Vec<ObjectSource>Raw byte objects referenced by the program.
program: ProgramThe reconstruction program.
observation_index: Option<ObservationIndex>Optional advisory observation index (Phase 7.3).
None is today’s descriptor and fully materializes. When Some, the
record is validated against the program at parse time; it is never
authority.
seek_directory: boolWhether to emit an optional seek DIRECTORY record (Phase 8).
false is today’s descriptor and produces the exact Phase-7 record
sequence (the universe string still carries the Phase-8 suffix). When
true, serialize writes a two-pass DIRECTORY record as the first
record; a directory requires an observation index to describe.
source_sha256: [u8; 32]SHA-256 of the exact reconstructed source.
source_len: u64Exact reconstructed source length.
Implementations§
Source§impl Descriptor
impl Descriptor
Sourcepub fn required_features(&self) -> u32
pub fn required_features(&self) -> u32
Mandatory feature bits implied by this descriptor’s contents.
Derived rather than stored, so no constructor can forget to declare a
feature: a descriptor carrying a DEFLATE_REPLAY op always sets
crate::container::header::FEATURE_DEFLATE_REPLAY in its header, and a
build without that feature rejects it at header validation.
Sourcepub fn optional_features(&self) -> u32
pub fn optional_features(&self) -> u32
Optional feature bits implied by this descriptor’s contents.
Optional bits are ignorable: a decoder that does not understand them still materializes the source exactly. The observation-index bit records only that a partial-decode lane is available, and the seek-directory bit only that a seek-based lane is available; exactness never requires either.
Sourcepub fn serialize(&self) -> Result<(Vec<u8>, CostBreakdown)>
pub fn serialize(&self) -> Result<(Vec<u8>, CostBreakdown)>
Serialize to a complete .voldoc byte sequence plus cost attribution.
When Descriptor::seek_directory is set this is a two-pass build: every
record payload is encoded first, the seek directory’s length is computed
from counts alone (so there is no chicken-and-egg), then the records are
emitted after the directory. A descriptor without a directory emits exactly
the record sequence and bytes it emitted before this field existed, and
cost.directory == 0.
Sourcepub fn parse(bytes: &[u8], limits: Limits) -> Result<ParsedDescriptor>
pub fn parse(bytes: &[u8], limits: Limits) -> Result<ParsedDescriptor>
Parse a complete .voldoc byte sequence with structural validation.
This validates framing, universe identity, version, mandatory features,
record presence, the coverage certificate, and declared length. It does
not materialize or hash the reconstructed source; call
crate::materialize::materialize for that.