[][src]Enum rocket::outcome::Outcome

#[must_use]pub enum Outcome<S, E, F> {
    Success(S),
    Failure(E),
    Forward(F),
}

An enum representing success (Success), failure (Failure), or forwarding (Forward).

See the top level documentation for detailed information.

Variants

Success(S)

Contains the success value.

Failure(E)

Contains the failure error value.

Forward(F)

Contains the value to forward on.

Implementations

impl<S, E, F> Outcome<S, E, F>[src]

pub fn unwrap(self) -> S[src]

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

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

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

pub fn is_success(&self) -> bool[src]

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

pub fn is_failure(&self) -> bool[src]

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

pub fn is_forward(&self) -> bool[src]

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

pub fn succeeded(self) -> Option<S>[src]

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

pub fn failed(self) -> Option<E>[src]

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

pub fn forwarded(self) -> Option<F>[src]

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

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

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"));

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

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"));

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

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."));

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

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"));

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

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

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

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"));

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

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.

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"));

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

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.

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

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

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.

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

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

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

impl<'r> Outcome<Response<'r>, Status, Data>[src]

pub fn from<T: Responder<'r>>(req: &Request, responder: T) -> Outcome<'r>[src]

Return the Outcome of response to req from responder.

If the responder returns Ok, an outcome of Success is returned with the response. If the responder returns Err, an outcome of Failure is returned with the status code.

Example

use rocket::{Request, Data};
use rocket::handler::Outcome;

fn str_responder(req: &Request, _: Data) -> Outcome<'static> {
    Outcome::from(req, "Hello, world!")
}

pub fn from_or_forward<T>(
    req: &Request,
    data: Data,
    responder: T
) -> Outcome<'r> where
    T: Responder<'r>, 
[src]

Return the Outcome of response to req from responder.

If the responder returns Ok, an outcome of Success is returned with the response. If the responder returns Err, an outcome of Forward is returned.

Example

use rocket::{Request, Data};
use rocket::handler::Outcome;

fn str_responder(req: &Request, data: Data) -> Outcome<'static> {
    Outcome::from_or_forward(req, data, "Hello, world!")
}

pub fn failure(code: Status) -> Outcome<'static>[src]

Return an Outcome of Failure with the status code code. This is equivalent to Outcome::Failure(code).

This method exists to be used during manual routing where rocket::handler::Outcome is imported instead of rocket::Outcome.

Example

use rocket::{Request, Data};
use rocket::handler::Outcome;
use rocket::http::Status;

fn bad_req_route(_: &Request, _: Data) -> Outcome<'static> {
    Outcome::failure(Status::BadRequest)
}

pub fn forward(data: Data) -> Outcome<'static>[src]

Return an Outcome of Forward with the data data. This is equivalent to Outcome::Forward(data).

This method exists to be used during manual routing where rocket::handler::Outcome is imported instead of rocket::Outcome.

Example

use rocket::{Request, Data};
use rocket::handler::Outcome;

fn always_forward(_: &Request, data: Data) -> Outcome<'static> {
    Outcome::forward(data)
}

Trait Implementations

impl<S: Clone, E: Clone, F: Clone> Clone for Outcome<S, E, F>[src]

impl<S: Copy, E: Copy, F: Copy> Copy for Outcome<S, E, F>[src]

impl<S, E, F> Debug for Outcome<S, E, F>[src]

impl<S, E, F> Display for Outcome<S, E, F>[src]

impl<S: Eq, E: Eq, F: Eq> Eq for Outcome<S, E, F>[src]

impl<S: Hash, E: Hash, F: Hash> Hash for Outcome<S, E, F>[src]

impl<S: Ord, E: Ord, F: Ord> Ord for Outcome<S, E, F>[src]

impl<S: PartialEq, E: PartialEq, F: PartialEq> PartialEq<Outcome<S, E, F>> for Outcome<S, E, F>[src]

impl<S: PartialOrd, E: PartialOrd, F: PartialOrd> PartialOrd<Outcome<S, E, F>> for Outcome<S, E, F>[src]

impl<S, E, F> StructuralEq for Outcome<S, E, F>[src]

impl<S, E, F> StructuralPartialEq for Outcome<S, E, F>[src]

impl<S, E, F> Try for Outcome<S, E, F>[src]

type Ok = S

🔬 This is a nightly-only experimental API. (try_trait)

The type of this value when viewed as successful.

type Error = Result<F, E>

🔬 This is a nightly-only experimental API. (try_trait)

The type of this value when viewed as failed.

Auto Trait Implementations

impl<S, E, F> RefUnwindSafe for Outcome<S, E, F> where
    E: RefUnwindSafe,
    F: RefUnwindSafe,
    S: RefUnwindSafe

impl<S, E, F> Send for Outcome<S, E, F> where
    E: Send,
    F: Send,
    S: Send

impl<S, E, F> Sync for Outcome<S, E, F> where
    E: Sync,
    F: Sync,
    S: Sync

impl<S, E, F> Unpin for Outcome<S, E, F> where
    E: Unpin,
    F: Unpin,
    S: Unpin

impl<S, E, F> UnwindSafe for Outcome<S, E, F> where
    E: UnwindSafe,
    F: UnwindSafe,
    S: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T, I> AsResult<T, I> for T where
    I: Input
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<Q, K> Equivalent<K> for Q where
    K: Borrow<Q> + ?Sized,
    Q: Eq + ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> IntoCollection<T> for T[src]

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Typeable for T where
    T: Any

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