Struct DispatchTable

Source
pub struct DispatchTable {
    map: HashMap<FuncType, InvokerEnt>,
}
Expand description

A collection of method implementations for different method and object types.

A DispatchTable is constructed at run-time from entries registered with static_rpc_invoke_fn!.

There is one for each arti-rpcserver::RpcMgr, shared with each arti-rpcserver::Connection.

Fields§

§map: HashMap<FuncType, InvokerEnt>

An internal HashMap used to look up the correct function for a given method/object pair.

Implementations§

Source§

impl DispatchTable

Source

pub fn dispatch_information(&self) -> RpcDispatchInformation

Available on crate feature describe-methods only.

Return a description for all of the RPC methods available, which types they expect and return, and which objects they apply to.

Currently, the resulting object is good for nothing but serialization.

Source§

impl DispatchTable

Source

pub fn from_inventory() -> Self

Construct a DispatchTable from the entries registered statically via static_rpc_invoke_fn!.

§Panics

Panics if two entries are found for the same (method,object) types.

Source

fn insert_inner(&mut self, ent: InvokerEnt) -> Option<InvokerEnt>

Add a new entry to this DispatchTable, and return the old value if any.

Source

pub fn insert(&mut self, ent: InvokerEnt)

Add a new entry to this DispatchTable.

§Panics

Panics if there was a previous entry inserted with the same (Object,Method) pair, but (apparently) with a different implementation function, or from a macro invocation.

Source

pub fn extend<I>(&mut self, ents: I)
where I: IntoIterator<Item = InvokerEnt>,

Add multiple new entries to this DispatchTable.

§Panics

As for insert.

Source

fn resolve_entry( &self, obj: Arc<dyn Object>, method_id: TypeId, ) -> Result<(Arc<dyn Object>, &InvokerEnt), InvokeError>

Helper: Look up the InvokerEnt for a given method on a given object, performing delegation as necessary.

Along with the InvokerEnt, return either the object, or a delegation target on which the method should be invoked.

Source

pub(crate) fn resolve_rpc_invoker( &self, obj: Arc<dyn Object>, method: &dyn DynMethod, ) -> Result<(Arc<dyn Object>, &'static dyn RpcInvocable), InvokeError>

Helper: Resolve the invoker for a given RPC object and a given method type, if there is one.

Along with the invoker, return either the object, or a delegation target on which the method should be invoked.

Source

pub(crate) fn resolve_special_invoker<M: Method>( &self, obj: Arc<dyn Object>, ) -> Result<(Arc<dyn Object>, &'static dyn Invocable), InvokeError>

Helper: Return the special invoker for a given object and a given method type, if there is one.

Along with the invoker, return either the object, or a delegation target on which the method should be invoked.

Trait Implementations§

Source§

impl Clone for DispatchTable

Source§

fn clone(&self) -> DispatchTable

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DispatchTable

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. 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> 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSend for T
where T: Any + Send,

§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Sync + Send>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

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> 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.
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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