Extract

Trait Extract 

Source
pub trait Extract<T, E: Error>: Sized {
    // Required method
    fn extract<'a>(&'a self) -> Pin<Box<dyn Future<Output = Result<T, E>> + 'a>>;
}
Expand description

Implemented on a provider, it extracts a future that resolves to Ok(T) on success or Err(Self::Err) on error.

§Example

use extractors::Extract;
use std::{error::Error, fmt::Display};

struct Example(i32);

#[derive(Debug)]
struct Err;

impl Display for Err {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "Err")
    }
}

impl Error for Err {}

impl Extract<i32, Err> for Example {
    fn extract<'a>(&'a self) -> Pin<Box<dyn Future<Output = Result<i32, Err>> + 'a>> {
        Box::pin(std::future::ready(Ok(self.0)))
    }
}

Required Methods§

Source

fn extract<'a>(&'a self) -> Pin<Box<dyn Future<Output = Result<T, E>> + 'a>>

Extracts a value of type T. This method should return a future that resolves to Ok(T) on success or Err(Self::Error) on error.

§Example
use extractors::Extract;

// uses the `Example` struct and impl from the `Extract` trait documentation above.
let example = Example(1);
let extracted: i32 = example.extract().await.unwrap();
assert_eq!(extracted, 1);

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<P, T, E> Extract<Option<T>, E> for P
where P: Extract<T, E>, E: Error,

Source§

impl<Pro, Err, A> Extract<(A,), Err> for Pro
where Pro: Extract<A, Err>, Err: Error,

Source§

impl<Pro, Err, A, B> Extract<(A, B), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C> Extract<(A, B, C), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D> Extract<(A, B, C, D), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E> Extract<(A, B, C, D, E), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F> Extract<(A, B, C, D, E, F), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G> Extract<(A, B, C, D, E, F, G), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H> Extract<(A, B, C, D, E, F, G, H), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I> Extract<(A, B, C, D, E, F, G, H, I), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J> Extract<(A, B, C, D, E, F, G, H, I, J), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K> Extract<(A, B, C, D, E, F, G, H, I, J, K), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L> Extract<(A, B, C, D, E, F, G, H, I, J, K, L), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err> + Extract<P, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err> + Extract<P, Err> + Extract<Q, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err> + Extract<P, Err> + Extract<Q, Err> + Extract<R, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err> + Extract<P, Err> + Extract<Q, Err> + Extract<R, Err> + Extract<S, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err> + Extract<P, Err> + Extract<Q, Err> + Extract<R, Err> + Extract<S, Err> + Extract<T, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err> + Extract<P, Err> + Extract<Q, Err> + Extract<R, Err> + Extract<S, Err> + Extract<T, Err> + Extract<U, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err> + Extract<P, Err> + Extract<Q, Err> + Extract<R, Err> + Extract<S, Err> + Extract<T, Err> + Extract<U, Err> + Extract<V, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err> + Extract<P, Err> + Extract<Q, Err> + Extract<R, Err> + Extract<S, Err> + Extract<T, Err> + Extract<U, Err> + Extract<V, Err> + Extract<W, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err> + Extract<P, Err> + Extract<Q, Err> + Extract<R, Err> + Extract<S, Err> + Extract<T, Err> + Extract<U, Err> + Extract<V, Err> + Extract<W, Err> + Extract<X, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err> + Extract<P, Err> + Extract<Q, Err> + Extract<R, Err> + Extract<S, Err> + Extract<T, Err> + Extract<U, Err> + Extract<V, Err> + Extract<W, Err> + Extract<X, Err> + Extract<Y, Err>, Err: Error,

Source§

impl<Pro, Err, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z> Extract<(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z), Err> for Pro
where Pro: Extract<A, Err> + Extract<B, Err> + Extract<C, Err> + Extract<D, Err> + Extract<E, Err> + Extract<F, Err> + Extract<G, Err> + Extract<H, Err> + Extract<I, Err> + Extract<J, Err> + Extract<K, Err> + Extract<L, Err> + Extract<M, Err> + Extract<N, Err> + Extract<O, Err> + Extract<P, Err> + Extract<Q, Err> + Extract<R, Err> + Extract<S, Err> + Extract<T, Err> + Extract<U, Err> + Extract<V, Err> + Extract<W, Err> + Extract<X, Err> + Extract<Y, Err> + Extract<Z, Err>, Err: Error,