Type Alias rocket::data::Outcome

source ·
pub type Outcome<'r, T, E = <T as FromData<'r>>::Error> = Outcome<T, (Status, E), (Data<'r>, Status)>;
Expand description

Type alias for the Outcome of FromData.

Aliased Type§

enum Outcome<'r, T, E = <T as FromData<'r>>::Error> {
    Success(T),
    Failure((Status, E)),
    Forward((Data<'r>, Status)),
}

Variants§

§

Success(T)

Contains the success value.

§

Failure((Status, E))

Contains the failure error value.

§

Forward((Data<'r>, Status))

Contains the value to forward on.

Implementations§

source§

impl<S, E, F> Outcome<S, E, F>

source

pub fn unwrap(self) -> S

Unwraps the Outcome, yielding the contents of a Success.

Panics

Panics if the value is not Success.

Examples
let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.unwrap(), 10);
source

pub fn expect(self, message: &str) -> S

Unwraps the Outcome, yielding the contents of a Success.

Panics

If the value is not Success, panics with the given message.

Examples
let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.expect("success value"), 10);
source

pub fn is_success(&self) -> bool

Return true if this Outcome is a Success.

Examples
let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.is_success(), true);

let x: Outcome<i32, &str, usize> = Failure("Hi! I'm an error.");
assert_eq!(x.is_success(), false);

let x: Outcome<i32, &str, usize> = Forward(25);
assert_eq!(x.is_success(), false);
source

pub fn is_failure(&self) -> bool

Return true if this Outcome is a Failure.

Examples
let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.is_failure(), false);

let x: Outcome<i32, &str, usize> = Failure("Hi! I'm an error.");
assert_eq!(x.is_failure(), true);

let x: Outcome<i32, &str, usize> = Forward(25);
assert_eq!(x.is_failure(), false);
source

pub fn is_forward(&self) -> bool

Return true if this Outcome is a Forward.

Examples
let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.is_forward(), false);

let x: Outcome<i32, &str, usize> = Failure("Hi! I'm an error.");
assert_eq!(x.is_forward(), false);

let x: Outcome<i32, &str, usize> = Forward(25);
assert_eq!(x.is_forward(), true);
source

pub fn succeeded(self) -> Option<S>

Converts from Outcome<S, E, F> to Option<S>.

Returns the Some of the Success if this is a Success, otherwise returns None. self is consumed, and all other values are discarded.

let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.succeeded(), Some(10));

let x: Outcome<i32, &str, usize> = Failure("Hi! I'm an error.");
assert_eq!(x.succeeded(), None);

let x: Outcome<i32, &str, usize> = Forward(25);
assert_eq!(x.succeeded(), None);
source

pub fn failed(self) -> Option<E>

Converts from Outcome<S, E, F> to Option<E>.

Returns the Some of the Failure if this is a Failure, otherwise returns None. self is consumed, and all other values are discarded.

let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.failed(), None);

let x: Outcome<i32, &str, usize> = Failure("Hi! I'm an error.");
assert_eq!(x.failed(), Some("Hi! I'm an error."));

let x: Outcome<i32, &str, usize> = Forward(25);
assert_eq!(x.failed(), None);
source

pub fn forwarded(self) -> Option<F>

Converts from Outcome<S, E, F> to Option<F>.

Returns the Some of the Forward if this is a Forward, otherwise returns None. self is consumed, and all other values are discarded.

let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.forwarded(), None);

let x: Outcome<i32, &str, usize> = Failure("Hi! I'm an error.");
assert_eq!(x.forwarded(), None);

let x: Outcome<i32, &str, usize> = Forward(25);
assert_eq!(x.forwarded(), Some(25));
source

pub fn success_or<T>(self, value: T) -> Result<S, T>

Returns a Success value as Ok() or value in Err. Converts from Outcome<S, E, F> to Result<S, T> for a given T.

Returns Ok with the Success value if this is a Success, otherwise returns an Err with the provided value. self is consumed, and all other values are discarded.

let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.success_or(false), Ok(10));

let x: Outcome<i32, &str, usize> = Failure("Hi! I'm an error.");
assert_eq!(x.success_or(false), Err(false));

let x: Outcome<i32, &str, usize> = Forward(25);
assert_eq!(x.success_or("whoops"), Err("whoops"));
source

pub fn success_or_else<T, V: FnOnce() -> T>(self, f: V) -> Result<S, T>

Returns a Success value as Ok() or f() in Err. Converts from Outcome<S, E, F> to Result<S, T> for a given T produced from a supplied function or closure.

Returns Ok with the Success value if this is a Success, otherwise returns an Err with the result of calling f. self is consumed, and all other values are discarded.

let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.success_or_else(|| false), Ok(10));

let x: Outcome<i32, &str, usize> = Failure("Hi! I'm an error.");
assert_eq!(x.success_or_else(|| false), Err(false));

let x: Outcome<i32, &str, usize> = Forward(25);
assert_eq!(x.success_or_else(|| "whoops"), Err("whoops"));
source

pub fn as_ref(&self) -> Outcome<&S, &E, &F>

Converts from Outcome<S, E, F> to Outcome<&S, &E, &F>.

let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.as_ref(), Success(&10));

let x: Outcome<i32, &str, usize> = Failure("Hi! I'm an error.");
assert_eq!(x.as_ref(), Failure(&"Hi! I'm an error."));
source

pub fn as_mut(&mut self) -> Outcome<&mut S, &mut E, &mut F>

Converts from Outcome<S, E, F> to Outcome<&mut S, &mut E, &mut F>.

let mut x: Outcome<i32, &str, usize> = Success(10);
if let Success(val) = x.as_mut() {
    *val = 20;
}

assert_eq!(x.unwrap(), 20);
source

pub fn map<T, M: FnOnce(S) -> T>(self, f: M) -> Outcome<T, E, F>

Maps the Success value using f. Maps an Outcome<S, E, F> to an Outcome<T, E, F> by applying the function f to the value of type S in self if self is an Outcome::Success.

let x: Outcome<i32, &str, usize> = Success(10);

let mapped = x.map(|v| if v == 10 { "10" } else { "not 10" });
assert_eq!(mapped, Success("10"));
source

pub fn map_failure<T, M: FnOnce(E) -> T>(self, f: M) -> Outcome<S, T, F>

Maps the Failure value using f. Maps an Outcome<S, E, F> to an Outcome<S, T, F> by applying the function f to the value of type E in self if self is an Outcome::Failure.

let x: Outcome<i32, &str, usize> = Failure("hi");

let mapped = x.map_failure(|v| if v == "hi" { 10 } else { 0 });
assert_eq!(mapped, Failure(10));
source

pub fn map_forward<T, M: FnOnce(F) -> T>(self, f: M) -> Outcome<S, E, T>

Maps the Forward value using f. Maps an Outcome<S, E, F> to an Outcome<S, E, T> by applying the function f to the value of type F in self if self is an Outcome::Forward.

let x: Outcome<i32, &str, usize> = Forward(5);

let mapped = x.map_forward(|v| if v == 5 { "a" } else { "b" });
assert_eq!(mapped, Forward("a"));
source

pub fn and_then<T, M: FnOnce(S) -> Outcome<T, E, F>>( self, f: M ) -> Outcome<T, E, F>

Converts from Outcome<S, E, F> to Outcome<T, E, F> using f to map Success(S) to Success(T).

If self is not Success, self is returned.

Examples
let x: Outcome<i32, &str, bool> = Success(10);

let mapped = x.and_then(|v| match v {
   10 => Success("10"),
   1 => Forward(false),
   _ => Failure("30")
});

assert_eq!(mapped, Success("10"));
source

pub fn failure_then<T, M: FnOnce(E) -> Outcome<S, T, F>>( self, f: M ) -> Outcome<S, T, F>

Converts from Outcome<S, E, F> to Outcome<S, T, F> using f to map Failure(E) to Failure(T).

If self is not Failure, self is returned.

Examples
let x: Outcome<i32, &str, bool> = Failure("hi");

let mapped = x.failure_then(|v| match v {
   "hi" => Failure(10),
   "test" => Forward(false),
   _ => Success(10)
});

assert_eq!(mapped, Failure(10));
source

pub fn forward_then<T, M: FnOnce(F) -> Outcome<S, E, T>>( self, f: M ) -> Outcome<S, E, T>

Converts from Outcome<S, E, F> to Outcome<S, E, T> using f to map Forward(F) to Forward(T).

If self is not Forward, self is returned.

Examples
let x: Outcome<i32, &str, Option<bool>> = Forward(Some(false));

let mapped = x.forward_then(|v| match v {
   Some(true) => Success(10),
   Some(false) => Forward(20),
   None => Failure("10")
});

assert_eq!(mapped, Forward(20));
source

pub fn ok_map_forward<M>(self, f: M) -> Result<S, E>where M: FnOnce(F) -> Result<S, E>,

Converts Outcome<S, E, F> to Result<S, E> by identity mapping Success(S) and Failure(E) to Result<T, E> and mapping Forward(F) to Result<T, E> using f.

let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.ok_map_forward(|x| Ok(x as i32 + 1)), Ok(10));

let x: Outcome<i32, &str, usize> = Failure("hello");
assert_eq!(x.ok_map_forward(|x| Ok(x as i32 + 1)), Err("hello"));

let x: Outcome<i32, &str, usize> = Forward(0);
assert_eq!(x.ok_map_forward(|x| Ok(x as i32 + 1)), Ok(1));
source

pub fn ok_map_failure<M>(self, f: M) -> Result<S, F>where M: FnOnce(E) -> Result<S, F>,

Converts Outcome<S, E, F> to Result<S, E> by identity mapping Success(S) and Forward(F) to Result<T, F> and mapping Failure(E) to Result<T, F> using f.

let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.ok_map_failure(|s| Ok(123)), Ok(10));

let x: Outcome<i32, &str, usize> = Failure("hello");
assert_eq!(x.ok_map_failure(|s| Ok(123)), Ok(123));

let x: Outcome<i32, &str, usize> = Forward(0);
assert_eq!(x.ok_map_failure(|s| Ok(123)), Err(0));
source§

impl<'a, S: Send + 'a, E: Send + 'a, F: Send + 'a> Outcome<S, E, F>

source

pub fn pin(self) -> BoxFuture<'a, Self>

Pins a future that resolves to self, returning a BoxFuture that resolves to self.

Trait Implementations§

source§

impl<S: Clone, E: Clone, F: Clone> Clone for Outcome<S, E, F>

source§

fn clone(&self) -> Outcome<S, E, F>

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<S, E, F> Debug for Outcome<S, E, F>

source§

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

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

impl<S, E, F> Display for Outcome<S, E, F>

source§

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

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

impl<S: Hash, E: Hash, F: Hash> Hash for Outcome<S, E, F>

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<S: Ord, E: Ord, F: Ord> Ord for Outcome<S, E, F>

source§

fn cmp(&self, other: &Outcome<S, E, F>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl<S: PartialEq, E: PartialEq, F: PartialEq> PartialEq<Outcome<S, E, F>> for Outcome<S, E, F>

source§

fn eq(&self, other: &Outcome<S, E, F>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<S: PartialOrd, E: PartialOrd, F: PartialOrd> PartialOrd<Outcome<S, E, F>> for Outcome<S, E, F>

source§

fn partial_cmp(&self, other: &Outcome<S, E, F>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl<S: Copy, E: Copy, F: Copy> Copy for Outcome<S, E, F>

source§

impl<S: Eq, E: Eq, F: Eq> Eq for Outcome<S, E, F>

source§

impl<S, E, F> StructuralEq for Outcome<S, E, F>

source§

impl<S, E, F> StructuralPartialEq for Outcome<S, E, F>