pub struct AndThenAsyncCaller<Out: for<'de> ArgumentDecoder<'de> + Send, Out2: for<'de> ArgumentDecoder<'de> + Send, Inner: AsyncCall<Out> + Send, R: Future<Output = Result<Out2, AgentError>> + Send, AndThen: Send + Fn(Out) -> R> { /* private fields */ }
Expand description

An AsyncCall that applies a transform function to the result of the call. Because of constraints on the type system in Rust, both the input and output to the function must be deserializable.

Implementations§

source§

impl<Out, Out2, Inner, R, AndThen> AndThenAsyncCaller<Out, Out2, Inner, R, AndThen>
where Out: for<'de> ArgumentDecoder<'de> + Send, Out2: for<'de> ArgumentDecoder<'de> + Send, Inner: AsyncCall<Out> + Send, R: Future<Output = Result<Out2, AgentError>> + Send, AndThen: Send + Fn(Out) -> R,

source

pub fn new(inner: Inner, and_then: AndThen) -> Self

Equivalent to inner.and_then(and_then).

source

pub async fn call(self) -> Result<RequestId, AgentError>

source

pub async fn call_and_wait(self) -> Result<Out2, AgentError>

source

pub fn and_then<Out3, R2, AndThen2>( self, and_then: AndThen2 ) -> AndThenAsyncCaller<Out2, Out3, Self, R2, AndThen2>
where Out3: for<'de> ArgumentDecoder<'de> + Send, R2: Future<Output = Result<Out3, AgentError>> + Send, AndThen2: Send + Fn(Out2) -> R2,

source

pub fn map<Out3, Map>( self, map: Map ) -> MappedAsyncCaller<Out2, Out3, Self, Map>
where Out3: for<'de> ArgumentDecoder<'de> + Send, Map: Send + Fn(Out2) -> Out3,

Trait Implementations§

source§

impl<Out, Out2, Inner, R, AndThen> AsyncCall<Out2> for AndThenAsyncCaller<Out, Out2, Inner, R, AndThen>
where Out: for<'de> ArgumentDecoder<'de> + Send, Out2: for<'de> ArgumentDecoder<'de> + Send, Inner: AsyncCall<Out> + Send, R: Future<Output = Result<Out2, AgentError>> + Send, AndThen: Send + Fn(Out) -> R,

source§

fn call<'async_trait>( self ) -> Pin<Box<dyn Future<Output = Result<RequestId, AgentError>> + Send + 'async_trait>>
where Self: 'async_trait,

Execute the call, but returns the RequestId. Waiting on the request Id must be managed by the caller using the Agent directly. Read more
source§

fn call_and_wait<'async_trait>( self ) -> Pin<Box<dyn Future<Output = Result<Out2, AgentError>> + Send + 'async_trait>>
where Self: 'async_trait,

Execute the call, and wait for an answer using an exponential-backoff strategy. The return type is encoded in the trait.
source§

fn and_then<Out2, R, AndThen>( self, and_then: AndThen ) -> AndThenAsyncCaller<Out, Out2, Self, R, AndThen>
where Self: Sized + Send, Out2: for<'de> ArgumentDecoder<'de> + Send, R: Future<Output = Result<Out2, AgentError>> + Send, AndThen: Send + Fn(Out) -> R,

Apply a transformation function after the call has been successful. The transformation is applied with the result. Read more
source§

fn map<Out2, Map>(self, map: Map) -> MappedAsyncCaller<Out, Out2, Self, Map>
where Self: Sized + Send, Out2: for<'de> ArgumentDecoder<'de> + Send, Map: Send + Fn(Out) -> Out2,

Apply a transformation function after the call has been successful. Equivalent to .and_then(|x| async { map(x) }).
source§

impl<Out, Out2, Inner, R, AndThen> Debug for AndThenAsyncCaller<Out, Out2, Inner, R, AndThen>
where Out: for<'de> ArgumentDecoder<'de> + Send, Out2: for<'de> ArgumentDecoder<'de> + Send, Inner: AsyncCall<Out> + Send + Debug, R: Future<Output = Result<Out2, AgentError>> + Send, AndThen: Send + Fn(Out) -> R + Debug,

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<Out, Out2, Inner, R, AndThen> Freeze for AndThenAsyncCaller<Out, Out2, Inner, R, AndThen>
where AndThen: Freeze, Inner: Freeze,

§

impl<Out, Out2, Inner, R, AndThen> RefUnwindSafe for AndThenAsyncCaller<Out, Out2, Inner, R, AndThen>
where AndThen: RefUnwindSafe, Inner: RefUnwindSafe, Out: RefUnwindSafe, Out2: RefUnwindSafe,

§

impl<Out, Out2, Inner, R, AndThen> Send for AndThenAsyncCaller<Out, Out2, Inner, R, AndThen>

§

impl<Out, Out2, Inner, R, AndThen> Sync for AndThenAsyncCaller<Out, Out2, Inner, R, AndThen>
where AndThen: Sync, Inner: Sync, Out: Sync, Out2: Sync,

§

impl<Out, Out2, Inner, R, AndThen> Unpin for AndThenAsyncCaller<Out, Out2, Inner, R, AndThen>
where AndThen: Unpin, Inner: Unpin, Out: Unpin, Out2: Unpin,

§

impl<Out, Out2, Inner, R, AndThen> UnwindSafe for AndThenAsyncCaller<Out, Out2, Inner, R, AndThen>
where AndThen: UnwindSafe, Inner: UnwindSafe, Out: UnwindSafe, Out2: UnwindSafe,

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

source§

fn from(t: T) -> T

Returns the argument unchanged.

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

§

type Output = T

Should always be Self
source§

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

§

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

§

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