Skip to main content

ErasedHandler

Struct ErasedHandler 

Source
pub struct ErasedHandler { /* private fields */ }
Expand description

Shared, type-erased handler. Clones retain the same handler allocation. Implements Send + Sync on native targets, but not on WASM.

Implementations§

Source§

impl ErasedHandler

Source

pub fn new(handler: impl Serve + 'static) -> Self

Erase handler.

Source

pub fn unavailable( descriptor: HandlerDescriptor, why: impl Into<String>, ) -> Self

A handler that serves nothing: it is descriptor, and every effect it gets is answered ErrorKind::HandlerUnavailable with why. For a model whose calls a plugin answers itself, such as from a batch, so a call that reaches the handler by mistake fails plainly while records still name the model.

use rig_core::completion::ModelRef;
use rig_core::effect::{FamilyDescriptor, HandlerDescriptor, model_key};
use rig_core::serve::ErasedHandler;

let descriptor = HandlerDescriptor {
    key: model_key("batch/claude"),
    family: FamilyDescriptor::Completion {
        model: ModelRef::from("batch/claude"),
        capabilities: Default::default(),
    },
    layers: Vec::new(),
};
let handler = ErasedHandler::unavailable(descriptor, "answered from the batch API");
assert_eq!(handler.key(), &model_key("batch/claude"));
Source

pub fn layered(self, intercept: impl Intercept) -> Self

Wrap this handler in a Layer: intercept sees every dispatch before this handler does and every answer after. handler.layered(a).layered(b) calls b.before first and a.after first.

Source

pub fn map_stream<M, F>(self, name: impl Into<String>, make: M) -> Self
where M: Fn(Arc<PublishedContext>) -> F + WasmCompatSend + WasmCompatSync + 'static, F: FnMut(Relayed) -> Vec<Relayed> + WasmCompatSend + 'static,

Rewrite this handler’s completion streams: every item of each reply passes through a fresh make(published) in order, and the items it returns go on in its place. It sees the Relayed::Done too, so a rewrite of the events also rewrites the response the reply ends with. A unary completion is rewritten as its events, so both delivery modes answer alike; other outcomes and errors pass as they are. name joins the descriptor’s layers.

published is the dispatch’s PublishedContext: a fact the rewrite inserts there before it passes the Done on, such as that it split reasoning out of this reply, comes back to the driver beside the reply and is recorded with it.

Unlike a Layer, the rewrite is recorded: the record of a dispatch is the reply the consumer receives, so a replay of it does not rewrite twice.

Source

pub fn descriptor(&self) -> HandlerDescriptor

What the erased handler is.

Source

pub fn key(&self) -> &HandlerKey

The key of its descriptor, without building one.

Source

pub fn handle(&self, kind: EffectKind, dispatch: Dispatch) -> HandlerFuture<'_>

Serve one effect: the driver’s call, straight to the boxed handler.

Source

pub fn footprint(&self, kind: &EffectKind) -> Option<Touches>

What dispatching kind to this handler may read and change (Serve::footprint).

Source

pub fn check(&self, kind: &EffectKind) -> Vec<UnsupportedOption>

The options of kind this handler would leave out (Serve::check).

Source

pub fn ptr_eq(&self, other: &Self) -> bool

Whether two erased handlers are the same allocation.

Trait Implementations§

Source§

impl Clone for ErasedHandler

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for ErasedHandler

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Serve for ErasedHandler

Forwards serving to the wrapped handler; re-erasure adds another boxed future.

Source§

type Family = Dynamic

The family this handler serves, or Dynamic.
Source§

fn descriptor(&self) -> HandlerDescriptor

What this handler is: the family-keyed description a typed view checks at bind time and a scene serializes.
Source§

async fn serve(&self, kind: EffectKind, dispatch: Dispatch) -> Reply

Prepare an outcome or an owned stream for the driver to consume.
Source§

fn footprint(&self, kind: &EffectKind) -> Option<Touches>

What dispatching kind may read and change, for a tool’s handler (Tool::footprint); None when it cannot say, such as for arguments that do not parse.
Source§

fn check(&self, kind: &EffectKind) -> Vec<UnsupportedOption>

The options of kind this handler would leave out when it serves it, with nothing sent: for a model’s handler, what its wire or model cannot honour (DynModel::check). Empty when it leaves nothing out or cannot say, as by default.
Source§

fn key(&self) -> HandlerKey

The descriptor’s key. A handler whose descriptor is costly to build, such as a tool’s argument schema, says it without building one.

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

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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

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

Source§

fn vzip(self) -> V

Source§

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

Source§

impl<T> WasmCompatSync for T
where T: Sync,

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