Skip to main content

LayerSource

Trait LayerSource 

Source
pub trait LayerSource {
    // Required methods
    fn fetch_manifest(&self, layer: &LayerRef) -> Result<Vec<u8>, SourceError>;
    fn fetch_blob(&self, digest: &str) -> Result<Vec<u8>, SourceError>;

    // Provided methods
    fn fetch_line_status(
        &self,
        _layer: &LayerRef,
    ) -> Result<Option<Vec<u8>>, SourceError> { ... }
    fn fetch_line_index(
        &self,
        _line: &str,
    ) -> Result<Option<Vec<u8>>, SourceError> { ... }
    fn fetch_attestations(
        &self,
        _layer: &LayerRef,
    ) -> Result<Vec<CarriedAttestation>, SourceError> { ... }
    fn served_layers(
        &self,
        _line: &str,
    ) -> Result<Option<Vec<String>>, SourceError> { ... }
}
Expand description

Where bytes come from. Implementations ship in varve (public registry, archived core, test doubles); the trait is the seam an entitlement plug-in would use — and the reason none of them can influence acceptance.

Required Methods§

Source

fn fetch_manifest(&self, layer: &LayerRef) -> Result<Vec<u8>, SourceError>

Fetch the manifest bytes for a layer reference.

Source

fn fetch_blob(&self, digest: &str) -> Result<Vec<u8>, SourceError>

Fetch a blob (a tool binary) by its digest (sha256:<hex>).

Provided Methods§

Source

fn fetch_line_status( &self, _layer: &LayerRef, ) -> Result<Option<Vec<u8>>, SourceError>

Fetch the baseline line-status DSSE envelope this source carries beside the layer, if any (REQ-STATUS-DIST-001). Returns the opaque envelope bytes — the source is not trusted to have verified them; the caller re-verifies against the trust root before caching. A source that carries no baseline returns Ok(None), which is not an error: line-status is updatable evidence, absent on some layers.

Source

fn fetch_line_index(&self, _line: &str) -> Result<Option<Vec<u8>>, SourceError>

Fetch the realm’s signed line-index envelope for this line, if the source carries one (REQ-INDEXAUTH-001). Same contract as fetch_line_status: opaque bytes, re-verified by the caller against the trust root. The source is never trusted to have checked it — it is precisely the party this document exists to constrain.

Source

fn fetch_attestations( &self, _layer: &LayerRef, ) -> Result<Vec<CarriedAttestation>, SourceError>

Fetch the attestations this source carries beside the layer as referrer artifacts (REQ-ATTEST-002). Same contract as fetch_line_status: OPAQUE, UNTRUSTED bytes. The source is never trusted to have verified a statement — it is the party that would benefit from a forged one — so the caller persists them verbatim and varve verify re-checks each against the trust root.

A source carrying none returns Ok(vec![]), which is not an error: most layers carry no third-party evidence, and demanding some would make varve’s availability depend on other people’s publishing habits.

Source

fn served_layers(&self, _line: &str) -> Result<Option<Vec<String>>, SourceError>

The layer ids this source is willing to serve for a line. Used to detect OMISSION against the signed index. A source that cannot enumerate returns Ok(None) — distinct from Ok(Some(vec![])), which means “I enumerate, and I have nothing”, and would flag every indexed layer as hidden.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§