RouterClient

Struct RouterClient 

pub struct RouterClient { /* private fields */ }
Expand description

A client that can be composed from multiple subclients to interact with all of them as one.

§Bot IDs

BotIds are prefixed with the key used to insert the subclient. Take that into account when calling send or when reading the list of bots from bots.

If you are just forwarding an id that came from bots, to the send method, you don’t need to worry.

If you are creating BotIds manually you can use RouterClient::prefix and RouterClient::unprefix methods to help you.

§Cache

This router works by caching the results from calling bots on each sub-client. The method will only be called for a specific sub-client if there is no cached result yet, or if the cached result contains errors.

If a client is associated with a cached result, without errors, then its bots method will not be called again.

If you need to refresh the list of bots, you will need to invalidate the cache explicitly.

Implementations§

§

impl RouterClient

pub fn new() -> RouterClient

pub fn invalidate_all_bots_cache(&self)

Invalidates the bots cache for all sub-clients.

pub fn invalidate_bots_cache(&self, key: impl AsRef<str>)

Invalidates the bots cache for the client with the given key.

pub fn insert_client(&self, key: impl AsRef<str>, client: Box<dyn BotClient>)

Inserts a client with the given key.

pub fn remove_client(&self, key: impl AsRef<str>)

Removes a client by the key used to insert it.

pub fn get_client_cloned( &self, key: impl AsRef<str>, ) -> Option<Box<dyn BotClient>>

Gets a client by the key used to insert it, cloning it.

pub fn read_client<F, R>(&self, key: impl AsRef<str>, f: F) -> Option<R>
where F: FnOnce(&Box<dyn BotClient>) -> R,

Access a client immutably by the key used to insert it.

The closure will not be called if there is no client for the given key, but this function will give None in that case.

pub fn write_client<F, R>(&self, key: impl AsRef<str>, f: F) -> Option<R>
where F: FnOnce(&mut Box<dyn BotClient>) -> R,

Access a client mutably by the key used to insert it.

The closure will not be called if there is no client for the given key, but this function will give None in that case.

pub fn prefix(key: &str, bot_id: &BotId) -> BotId

Prefixes a bot id with the given key.

pub fn unprefix(bot_id: &BotId) -> Option<(&str, BotId)>

Unprefixes a bot id, returning the key and the original bot id.

Trait Implementations§

§

impl BotClient for RouterClient

§

fn bots( &mut self, ) -> Pin<Box<dyn PlatformSendFuture<Output = ClientResult<Vec<Bot>>>>>

Bots available under this client.
§

fn send( &mut self, bot_id: &BotId, messages: &[Message], tools: &[Tool], ) -> Pin<Box<dyn PlatformSendStream<Item = ClientResult<MessageContent>>>>

Send a message to a bot with support for streamed response. Read more
§

fn clone_box(&self) -> Box<dyn BotClient>

Make a boxed dynamic clone of this client to pass around.
§

impl Clone for RouterClient

§

fn clone(&self) -> RouterClient

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

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

Performs copy-assignment from source. Read more
§

impl Default for RouterClient

§

fn default() -> RouterClient

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

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

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

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

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

Convert &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)

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

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

§

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

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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.

§

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

§

type NoneType = T

§

fn null_value() -> T

The none-equivalent value.
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: 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
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: 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> Same for T

Source§

type Output = T

Should always be Self
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<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

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
§

impl<T> PlatformSend for T
where T: PlatformSendInner,

§

impl<T> PlatformSendInner for T
where T: Send,