pub trait Invocation: Clone {
fn zomes(&self) -> ZomesToInvoke;
fn fn_components(&self) -> FnComponentsⓘNotable traits for FnComponentsimpl Iterator for FnComponents type Item = String;
;
fn host_input(self) -> Result<ExternIO, SerializedBytesError>;
fn auth(&self) -> InvocationAuth;
}
Required Methods
fn zomes(&self) -> ZomesToInvoke
fn zomes(&self) -> ZomesToInvoke
Some invocations call into a single zome and some call into many or all zomes. An example of an invocation that calls across all zomes is init. Init must pass for every zome in order for the Dna overall to successfully init. An example of an invocation that calls a single zome is validation of an entry, because the entry is only defined in a single zome, so it only makes sense for that exact zome to define the validation logic for that entry. In the future this may be expanded to support a subset of zomes that is larger than one. For example, we may want to trigger a callback in all zomes that implement a trait/interface, but this doesn’t exist yet, so the only valid options are All or One.
fn fn_components(&self) -> FnComponentsⓘNotable traits for FnComponentsimpl Iterator for FnComponents type Item = String;
fn fn_components(&self) -> FnComponentsⓘNotable traits for FnComponentsimpl Iterator for FnComponents type Item = String;
Invocations execute in a “sparse” manner of decreasing specificity. In technical terms this
means that the list of strings in FnComponents will be concatenated into a single function
name to be called, then the last string will be removed and a shorter function name will
be attempted and so on until all variations have been attempted.
For example, if FnComponents was vec![“foo”, “bar”, “baz”] it would loop as “foo_bar_baz”
then “foo_bar” then “foo”. All of those three callbacks that are defined will be called
unless a definitive callback result is returned.
See CallbackResult::is_definitive
in zome_types.
All of the individual callback results are then folded into a single overall result value
as a From implementation on the invocation results structs (e.g. zome results vs. ribosome
results).
fn host_input(self) -> Result<ExternIO, SerializedBytesError>
fn host_input(self) -> Result<ExternIO, SerializedBytesError>
the serialized input from the host for the wasm call this is intentionally NOT a reference to self because ExternIO may be huge we want to be careful about cloning invocations