Skip to main content

Dispatcher

Struct Dispatcher 

Source
pub struct Dispatcher<R> { /* private fields */ }
Expand description

Routes a TrustTask<Value> to the handler registered for its Type URI.

Construct with Dispatcher::new, register handlers via Dispatcher::on, then call Dispatcher::dispatch for each inbound document. R is the handler’s return type — (), Result<TrustTask<Resp>, ErrorResponse>, or anything else; the dispatcher only adds RejectReason for the routing- and deserialization-time failures.

Implementations§

Source§

impl<R> Dispatcher<R>

Source

pub fn new() -> Dispatcher<R>

Build an empty Dispatcher. Add handlers with Self::on.

Source

pub fn on<P, F>(self, handler: F) -> Dispatcher<R>
where P: Payload + 'static, F: Fn(TrustTask<P>) -> R + Send + Sync + 'static,

Register handler for the Type URI declared by P.

On dispatch, the dispatcher looks up the inbound document’s type against the registered URIs in canonical form (TypeUri::for_routing), so a producer emitting either the bare URI or the #request-fragmented form per SPEC.md §4.4.1 item 1 routes to the same handler. #response-fragmented URIs are kept distinct and route to whatever (if anything) is registered for the response variant.

Registering the same canonical Type URI twice replaces the earlier handler.

Source

pub fn dispatch(&self, doc: TrustTask<Value>) -> Result<R, RejectReason>

Route doc to the handler registered for its type URI.

Returns:

  • Ok(R) — handler invoked successfully.
  • Err(RejectReason::UnsupportedVersion) — the slug is registered but not at this Type URI’s MAJOR.MINOR (SPEC §5.2 / §8.3).
  • Err(RejectReason::UnsupportedType) — the slug is not registered at all; the caller typically converts this into a trust-task-error response via TrustTask::reject_with.
  • Err(RejectReason::MalformedRequest) — the URI matched but the payload failed to deserialize against P.
Source

pub fn registered_uris(&self) -> Vec<&str>

The Type URIs this dispatcher currently routes for, in canonical form and sorted for stable output. Handy for unsupported_type error responses that list what the consumer does implement.

Source

pub fn dispatch_or_reject( &self, doc: TrustTask<Value>, error_id: impl Into<String>, ) -> Result<R, TrustTask<ErrorPayload>>

Route doc to the registered handler, returning either the handler’s success value or an ErrorResponse already routed per SPEC.md §8.1.

Equivalent to calling Self::dispatch and hand-converting any RejectReason via TrustTask::reject_with — most consumer code today writes that conversion as a six-line match, so this is the convenience form.

error_id supplies the id for the error response; the framework places no constraints on its form beyond uniqueness (SPEC.md §4.3). UUIDv4 is the recommended default.

The dispatcher only emits RejectReason::UnsupportedType (no handler registered for this Type URI) and RejectReason::MalformedRequest (payload failed to deserialize into the registered P). Both are routed to the original producer per SPEC.md §8.1 — neither carries the identity_mismatch transport-routing exception, so the safe default in TrustTask::reject_with applies.

ErrorResponse is intentionally large (it carries a full trust-task-error document including a typed payload and extra-member map). Boxing it in the Err variant would just push the allocation onto every caller; the convenience this method provides assumes the caller wants the value back unboxed.

Trait Implementations§

Source§

impl<R> Default for Dispatcher<R>

Source§

fn default() -> Dispatcher<R>

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> At for T

Source§

fn at<M>(self, metadata: M) -> Meta<T, M>

Wraps self inside a Meta<Self, M> using the given metadata. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> BorrowStripped for T

Source§

fn stripped(&self) -> &Stripped<T>

Source§

impl<T> BorrowUnordered for T

Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Clear for T

Source§

fn clear(&mut self)

Completely overwrites this value.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, C> FromWithContext<T, C> for T

Source§

fn from_with(value: T, _context: &C) -> T

Source§

impl<T> InitializableFromZeroed for T
where T: Default,

Source§

unsafe fn initialize(place: *mut T)

Called to initialize a place to a valid value, after it is set to all-bits-zero. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T, U, C> IntoWithContext<U, C> for T
where U: FromWithContext<T, C>,

Source§

fn into_with(self, context: &C) -> U

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ResourceProvider<()> for T

Source§

fn get_resource(&self) -> &()

Returns a reference to the resource of type T.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T

Source§

type Owned = T

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U, C> TryFromWithContext<U, C> for T
where U: IntoWithContext<T, C>,

Source§

type Error = !

Source§

fn try_from_with( value: U, context: &C, ) -> Result<T, <T as TryFromWithContext<U, C>>::Error>

Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, U, C> TryIntoWithContext<U, C> for T
where U: TryFromWithContext<T, C>,

Source§

type Error = <U as TryFromWithContext<T, C>>::Error

Source§

fn try_into_with( self, context: &C, ) -> Result<U, <T as TryIntoWithContext<U, C>>::Error>

Source§

impl<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithContext for T
where T: ?Sized,

Source§

fn with<C>(&self, context: C) -> Contextual<&T, C>

Source§

fn into_with<C>(self, context: C) -> Contextual<T, C>
where T: Sized,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more