pub struct Header {Show 26 fields
pub version: u8,
pub flags: u8,
pub metadata_offset: u64,
pub metadata_len: u64,
pub dictionary_offset: u64,
pub dictionary_len: u64,
pub root_dir_offset: u64,
pub root_dir_len: u64,
pub pyramid_meta_offset: u64,
pub pyramid_meta_len: u64,
pub dict_codec: u8,
pub block_codec: u8,
pub pyramid_levels: u16,
pub quad_count: u64,
pub term_count: u64,
pub content_hash: [u8; 16],
pub named_graphs_offset: u64,
pub named_graphs_len: u64,
pub schema_meta_len: u32,
pub text_index_offset: u64,
pub text_index_len: u64,
pub text_index_partial: bool,
pub build_info_offset: u64,
pub build_info_len: u64,
pub perms: PermSet,
pub extra_sections: Vec<Section>,
}Expand description
Decoded file header. All multi-byte fields are little-endian on disk. The
*_offset / *_len fields are a convenience view over the section directory
(populated from it on parse, emitted back to it on serialize).
Fields§
§version: u8Format version of the parsed file (currently
MIN_STABLE_READ_VERSION through CURRENT_FORMAT_VERSION).
flags: u8§metadata_offset: u64§metadata_len: u64§dictionary_offset: u64§dictionary_len: u64§root_dir_offset: u64§root_dir_len: u64§pyramid_meta_offset: u64§pyramid_meta_len: u64§dict_codec: u8§block_codec: u8§pyramid_levels: u16§quad_count: u64§term_count: u64§content_hash: [u8; 16]First 16 bytes of the blake3 content hash — an immutable validator.
named_graphs_offset: u64Named-graphs section (0 if the file has only the default graph).
named_graphs_len: u64§schema_meta_len: u32Byte length of the trailing schema-pyramid block within the pyramid-meta
section (0 if none). A reader fetches only that block — at
pyramid_meta_offset + pyramid_meta_len - schema_meta_len — for an
index/dictionary/summary-free Tier-0 coherence check.
text_index_offset: u64Full-text index section (0 if the file has none; built with
rete build --text-index). See SectionKind::TextIndex.
text_index_len: u64§text_index_partial: boolThe full-text index covers only some predicates: it is written (and was
read) as SectionKind::TextIndexPartial rather than
SectionKind::TextIndex. false for every file without one.
build_info_offset: u64Build-conditions section (0 if absent). See SectionKind::BuildInfo:
an opaque per-build record that is not covered by the content hash.
build_info_len: u64§perms: PermSetWhich index permutations the file’s index containers carry
(crate::index::PermSet).
On disk this is one byte at [50], inside the reserved core span, and
0 means all six — so every file written before the mask existed
decodes as PermSet::ALL and a full six-permutation build stays
byte-identical to what it always was. A lean file writes its mask
(0b000_0111 for SPO+POS+OSP), and its index container then holds three
sections rather than six, which is what an older reader trips over.
extra_sections: Vec<Section>Directory entries of the kinds added after the generation-1 freeze —
SectionKind::LabelIndex (8), SectionKind::Schema (9) — and of
any kind this build doesn’t recognize, preserved verbatim in directory
order. None of them is covered by the header content hash.
Implementations§
Source§impl Header
impl Header
Sourcepub fn from_bytes(b: &[u8]) -> Result<Header, HeaderError>
pub fn from_bytes(b: &[u8]) -> Result<Header, HeaderError>
Parse a header from the first 1024 bytes of a file.
Sourcepub fn label_index_section(&self) -> Option<Section>
pub fn label_index_section(&self) -> Option<Section>
The LABEL_INDEX section (kind 8), if the file carries a non-empty one.
Sourcepub fn schema_section(&self) -> Option<Section>
pub fn schema_section(&self) -> Option<Section>
The SCHEMA section (kind 9), if the file carries a non-empty one.
pub fn has_quads(&self) -> bool
Sourcepub fn expected_file_len(&self) -> Option<u64>
pub fn expected_file_len(&self) -> Option<u64>
The total file length implied by this header alone: the writer lays the
sections out back-to-back after the 1 KiB header and ends the file with
the 4-byte RETE footer, so the furthest offset + length in the
section directory plus 4 is the file length.
This is the one length signal a remote reader can always trust: an
HTTP host may advertise the size of a compressed representation in
Content-Length (GitHub Pages gzips — a 71 MB file HEADs as 58 MB)
while serving ranges over the identity bytes, and may hide
Content-Range from cross-origin JS by omitting
Access-Control-Expose-Headers. The header travels in band — in the
first 1 KiB range read — so it cannot be skewed by transport encoding.
None if any directory entry overflows u64 (a crafted or corrupt
header must yield “unknown”, never a panic or a wrapped length — the
weekly fuzz caught verify() on exactly this class of input).
Sourcepub fn has_quoted_triples(&self) -> bool
pub fn has_quoted_triples(&self) -> bool
Does the file contain RDF-star quoted triples ([FLAG_HAS_QUOTED_TRIPLES])?
Sourcepub fn has_tile_synopsis(&self) -> bool
pub fn has_tile_synopsis(&self) -> bool
Do the tiled index sections carry a [FLAG_TILE_SYNOPSIS] trailer?
Sourcepub fn text_index_covers_named_graphs(&self) -> bool
pub fn text_index_covers_named_graphs(&self) -> bool
Does the full-text index cover the named graphs’ literals too
([FLAG_TEXT_INDEX_NAMED_GRAPHS])? Known from the header alone.
Sourcepub fn text_index_payload(&self) -> (u64, u64)
pub fn text_index_payload(&self) -> (u64, u64)
The (offset, length) of the text index’s payload — the token-table
varint, the token table and the postings. That is the whole section for
kind 6; a kind-11 section starts with its 16-byte self-digest, which this
skips. (offset, 0) past a kind-11 section too short for its digest.
Sourcepub fn section(&self, kind: SectionKind) -> Option<Section>
pub fn section(&self, kind: SectionKind) -> Option<Section>
The directory entry for a section kind, or None if absent. Known kinds
read from the named convenience fields; unknown kinds from
extra_sections.
Sourcepub fn with_section(self, kind: SectionKind, offset: u64, length: u64) -> Header
pub fn with_section(self, kind: SectionKind, offset: u64, length: u64) -> Header
Attach (or overwrite) a section’s (offset, length) — the extension point
for new top-level sections. Known kinds set the named fields; an unknown
kind is appended to extra_sections.
Sourcepub fn has_quad_index(&self) -> bool
pub fn has_quad_index(&self) -> bool
Are the named graphs stored in the quad index ([FLAG_QUAD_INDEX])?
Sourcepub fn quad_index_section(&self) -> Option<Section>
pub fn quad_index_section(&self) -> Option<Section>
The QUAD_INDEX section, when the directory lists a non-empty one.
Sourcepub fn index_container_sections(&self) -> usize
pub fn index_container_sections(&self) -> usize
How many sections the index container (kind 3) holds: one per stored
permutation, plus the quad-index seal when [FLAG_QUAD_INDEX] is set.