pub type Outcome<'r> = Outcome<Response<'r>, Status, Data>;
Expand description
Type alias for the Outcome
of a Handler
.
Aliased Type§
enum Outcome<'r> {
Success(Response<'r>),
Failure(Status),
Forward(Data),
}
Variants§
Success(Response<'r>)
Contains the success value.
Failure(Status)
Contains the failure error value.
Forward(Data)
Contains the value to forward on.
Implementations§
Source§impl<'r> Outcome<'r>
impl<'r> Outcome<'r>
Sourcepub fn from<T: Responder<'r>>(req: &Request<'_>, responder: T) -> Outcome<'r>
pub fn from<T: Responder<'r>>(req: &Request<'_>, responder: T) -> Outcome<'r>
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!")
}
Sourcepub fn from_or_forward<T>(
req: &Request<'_>,
data: Data,
responder: T,
) -> Outcome<'r>where
T: Responder<'r>,
pub fn from_or_forward<T>(
req: &Request<'_>,
data: Data,
responder: T,
) -> Outcome<'r>where
T: Responder<'r>,
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!")
}
Sourcepub fn failure(code: Status) -> Outcome<'static>
pub fn failure(code: Status) -> Outcome<'static>
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)
}
Sourcepub fn forward(data: Data) -> Outcome<'static>
pub fn forward(data: Data) -> Outcome<'static>
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)
}
Source§impl<S, E, F> Outcome<S, E, F>
impl<S, E, F> Outcome<S, E, F>
Sourcepub fn is_success(&self) -> bool
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);
Sourcepub fn is_failure(&self) -> bool
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);
Sourcepub fn is_forward(&self) -> bool
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);
Sourcepub fn succeeded(self) -> Option<S>
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);
Sourcepub fn failed(self) -> Option<E>
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);
Sourcepub fn forwarded(self) -> Option<F>
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));
Sourcepub fn success_or<T>(self, value: T) -> Result<S, T>
pub fn success_or<T>(self, value: T) -> Result<S, T>
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"));
Sourcepub fn success_or_else<T, V: FnOnce() -> T>(self, f: V) -> Result<S, T>
pub fn success_or_else<T, V: FnOnce() -> T>(self, f: V) -> Result<S, T>
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"));
Sourcepub fn as_ref(&self) -> Outcome<&S, &E, &F>
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."));
Sourcepub fn map<T, M: FnOnce(S) -> T>(self, f: M) -> Outcome<T, E, F>
pub fn map<T, M: FnOnce(S) -> T>(self, f: M) -> Outcome<T, E, 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"));
Sourcepub fn map_failure<T, M: FnOnce(E) -> T>(self, f: M) -> Outcome<S, T, F>
pub fn map_failure<T, M: FnOnce(E) -> T>(self, f: M) -> Outcome<S, T, 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));
Sourcepub fn map_forward<T, M: FnOnce(F) -> T>(self, f: M) -> Outcome<S, E, T>
pub fn map_forward<T, M: FnOnce(F) -> T>(self, f: M) -> Outcome<S, E, T>
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"));
Sourcepub fn and_then<T, M: FnOnce(S) -> Outcome<T, E, F>>(
self,
f: M,
) -> Outcome<T, E, F>
pub fn and_then<T, M: FnOnce(S) -> Outcome<T, E, F>>( self, f: M, ) -> Outcome<T, E, 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
.
§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"));
Sourcepub fn failure_then<T, M: FnOnce(E) -> Outcome<S, T, F>>(
self,
f: M,
) -> Outcome<S, T, F>
pub fn failure_then<T, M: FnOnce(E) -> Outcome<S, T, F>>( self, f: M, ) -> Outcome<S, T, 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
.
§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));
Sourcepub fn forward_then<T, M: FnOnce(F) -> Outcome<S, E, T>>(
self,
f: M,
) -> Outcome<S, E, T>
pub fn forward_then<T, M: FnOnce(F) -> Outcome<S, E, T>>( self, f: M, ) -> Outcome<S, E, T>
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));
Trait Implementations
Source§impl<Y, S, E: From<Y>, F> FromResidual<Result<Infallible, Y>> for Outcome<S, E, F>
impl<Y, S, E: From<Y>, F> FromResidual<Result<Infallible, Y>> for Outcome<S, E, F>
Source§fn from_residual(r: Result<Infallible, Y>) -> Self
fn from_residual(r: Result<Infallible, Y>) -> Self
try_trait_v2
)Residual
type. Read moreSource§impl<S: Ord, E: Ord, F: Ord> Ord for Outcome<S, E, F>
impl<S: Ord, E: Ord, F: Ord> Ord for Outcome<S, E, F>
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl<S: PartialOrd, E: PartialOrd, F: PartialOrd> PartialOrd for Outcome<S, E, F>
impl<S: PartialOrd, E: PartialOrd, F: PartialOrd> PartialOrd for Outcome<S, E, F>
Source§impl<A, B, C> Try for Outcome<A, B, C>
impl<A, B, C> Try for Outcome<A, B, C>
Source§type Output = A
type Output = A
try_trait_v2
)?
when not short-circuiting.Source§type Residual = Outcome<!, B, C>
type Residual = Outcome<!, B, C>
try_trait_v2
)FromResidual::from_residual
as part of ?
when short-circuiting. Read moreSource§fn from_output(x: Self::Output) -> Self
fn from_output(x: Self::Output) -> Self
try_trait_v2
)Output
type. Read moreSource§fn branch(self) -> ControlFlow<Self::Residual, Self::Output>
fn branch(self) -> ControlFlow<Self::Residual, Self::Output>
try_trait_v2
)?
to decide whether the operator should produce a value
(because this returned ControlFlow::Continue
)
or propagate a value back to the caller
(because this returned ControlFlow::Break
). Read more