pub trait Resolver {
// Required methods
fn descriptor(&self, fn_hash: &str) -> Option<Cow<'_, [u8]>>;
fn receipt(&self, hash: &str) -> Option<Cow<'_, [u8]>>;
fn evaluate(&self, cell: &Cell, asof: &str) -> Option<Scalar>;
// Provided methods
fn manifest(&self, entry: &str) -> Option<Cow<'_, [u8]>> { ... }
fn evaluation(&self, cell: &Cell, asof: &str) -> Option<Evaluation> { ... }
}Expand description
What step 7 of SPEC 10.1 obtains: the descriptor, the input receipts (slice members
included), the manifests of slice entries, and the evaluation. This crate evaluates no
functions and fetches nothing; the caller supplies a resolver, and verify asks it only
for what step 7 reaches for the receipt at hand:
descriptoronce, forcell.fn_hash(7.1);- for each entry of
inputs, in order, stopping at the first that fails (7.5):receiptonce for a receipt hash; for a slice entryslice:<slice id>:<members hash>(spec-0.4.0),manifestonce, thenreceiptonce per member, in the manifest’s order; evaluationonce, only after 7.1-7.5 pass (7.6);- when the value differs and the evaluation came with a lineage,
receiptfor the lineage’s receipt hashes thatinputsdoes not list, in lineage order, until one shows a replaced input (E_INPUT_SUPERSEDED, 7.6).
Nothing is asked when steps 1-6 fail, and nothing about receipts below the inputs. The
descriptor, receipts and manifests are JSON text, so that 7.1 hashes the descriptor before
checking it and 7.5 reports an unparseable input as E_INPUT_INVALID, as the
specification orders.
manifest and evaluation are provided (0.3.4): a resolver written for 0.3.3 offers no
manifests (a slice entry is E_INPUT_UNAVAILABLE) and evaluates through
evaluate, with no lineage.
Required Methods§
Sourcefn descriptor(&self, fn_hash: &str) -> Option<Cow<'_, [u8]>>
fn descriptor(&self, fn_hash: &str) -> Option<Cow<'_, [u8]>>
The descriptor JSON text offered for fn_hash, or None if unavailable
(E_FN_UNAVAILABLE). Only None is unavailability: the text is parsed strictly
(unparseable text reports its parse code), and any other JSON value, null included,
is a descriptor offered that fails the hash check (E_FN_HASH_MISMATCH, SPEC 10.1
step 7.1).
Sourcefn receipt(&self, hash: &str) -> Option<Cow<'_, [u8]>>
fn receipt(&self, hash: &str) -> Option<Cow<'_, [u8]>>
The receipt JSON text offered for receipt hash hash, or None if unavailable
(E_INPUT_UNAVAILABLE).
Sourcefn evaluate(&self, cell: &Cell, asof: &str) -> Option<Scalar>
fn evaluate(&self, cell: &Cell, asof: &str) -> Option<Scalar>
The value of evaluating cell as of asof (for stored: the value looked up as of it,
SPEC 10.1 step 7.6), or None if this resolver cannot evaluate it: no runtime for the
language, a budget exceeded, inputs the evaluator cannot obtain
(E_EVAL_UNAVAILABLE, see VerifyResult). asof is the receipt’s asof.
Provided Methods§
Sourcefn manifest(&self, entry: &str) -> Option<Cow<'_, [u8]>>
fn manifest(&self, entry: &str) -> Option<Cow<'_, [u8]>>
The manifest JSON text offered for slice entry entry (slice:<slice id>:<members hash>), or None if unavailable (E_INPUT_UNAVAILABLE). The text is parsed strictly
and checked as a Manifest; one that does not hash to the entry is
E_INPUT_UNAVAILABLE, as a receipt with another hash. Provided: None.
Sourcefn evaluation(&self, cell: &Cell, asof: &str) -> Option<Evaluation>
fn evaluation(&self, cell: &Cell, asof: &str) -> Option<Evaluation>
Evaluates cell as of asof, with the evaluation’s lineage when the resolver has it:
the inputs entries the evaluation read (10.1 step 7.6). verify calls this once,
in place of evaluate. When the value differs from the receipt’s,
a lineage that replaces one of the receipt’s inputs by a later version of the same cell
(whose receipt it offers through receipt), or one of its slice
entries by an item beginning slice:<the same slice id>:, makes the result
E_INPUT_SUPERSEDED instead of E_VALUE_MISMATCH. Provided: evaluate’s value, with
no lineage.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".