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§
Sourcefn fetch_manifest(&self, layer: &LayerRef) -> Result<Vec<u8>, SourceError>
fn fetch_manifest(&self, layer: &LayerRef) -> Result<Vec<u8>, SourceError>
Fetch the manifest bytes for a layer reference.
Sourcefn fetch_blob(&self, digest: &str) -> Result<Vec<u8>, SourceError>
fn fetch_blob(&self, digest: &str) -> Result<Vec<u8>, SourceError>
Fetch a blob (a tool binary) by its digest (sha256:<hex>).
Provided Methods§
Sourcefn fetch_line_status(
&self,
_layer: &LayerRef,
) -> Result<Option<Vec<u8>>, SourceError>
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.
Sourcefn fetch_line_index(&self, _line: &str) -> Result<Option<Vec<u8>>, SourceError>
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.
Sourcefn fetch_attestations(
&self,
_layer: &LayerRef,
) -> Result<Vec<CarriedAttestation>, SourceError>
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.
Sourcefn served_layers(&self, _line: &str) -> Result<Option<Vec<String>>, SourceError>
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".