pub type Outcome<S, E> = Outcome<S, (Status, E), Status>;
Expand description
Type alias for the Outcome
of a FromRequest
conversion.
Aliased Type§
enum Outcome<S, E> {
Success(S),
Error((Status, E)),
Forward(Status),
}
Variants§
Success(S)
Contains the success value.
Error((Status, E))
Contains the error error value.
Forward(Status)
Contains the value to forward on.
Implementations
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> = Error("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_error(&self) -> bool
pub fn is_error(&self) -> bool
Return true if this Outcome
is an Error
.
§Examples
let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.is_error(), false);
let x: Outcome<i32, &str, usize> = Error("Hi! I'm an error.");
assert_eq!(x.is_error(), true);
let x: Outcome<i32, &str, usize> = Forward(25);
assert_eq!(x.is_error(), 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> = Error("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> = Error("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 Error
if this is an Error
, 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> = Error("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> = Error("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>
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> = Error("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>
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> = Error("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> = Error("Hi! I'm an error.");
assert_eq!(x.as_ref(), Error(&"Hi! I'm an error."));
Sourcepub fn as_mut(&mut self) -> Outcome<&mut S, &mut E, &mut F>
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);
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 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"));
Sourcepub fn map_error<T, M: FnOnce(E) -> T>(self, f: M) -> Outcome<S, T, F>
pub fn map_error<T, M: FnOnce(E) -> T>(self, f: M) -> Outcome<S, T, F>
Maps the Error
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::Error
.
let x: Outcome<i32, &str, usize> = Error("hi");
let mapped = x.map_error(|v| if v == "hi" { 10 } else { 0 });
assert_eq!(mapped, Error(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 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"));
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>
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),
_ => Error("30")
});
assert_eq!(mapped, Success("10"));
Sourcepub fn error_then<T, M: FnOnce(E) -> Outcome<S, T, F>>(
self,
f: M,
) -> Outcome<S, T, F>
pub fn error_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
Error(E)
to Error(T)
.
If self
is not Error
, self
is returned.
§Examples
let x: Outcome<i32, &str, bool> = Error("hi");
let mapped = x.error_then(|v| match v {
"hi" => Error(10),
"test" => Forward(false),
_ => Success(10)
});
assert_eq!(mapped, Error(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>
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 => Error("10")
});
assert_eq!(mapped, Forward(20));
Sourcepub fn ok_map_forward<M>(self, f: M) -> Result<S, E>
pub fn ok_map_forward<M>(self, f: M) -> Result<S, E>
Converts Outcome<S, E, F>
to Result<S, E>
by identity mapping
Success(S)
and Error(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> = Error("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));
Sourcepub fn ok_map_error<M>(self, f: M) -> Result<S, F>
pub fn ok_map_error<M>(self, f: M) -> 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 Error(E)
to Result<T, F>
using f
.
let x: Outcome<i32, &str, usize> = Success(10);
assert_eq!(x.ok_map_error(|s| Ok(123)), Ok(10));
let x: Outcome<i32, &str, usize> = Error("hello");
assert_eq!(x.ok_map_error(|s| Ok(123)), Ok(123));
let x: Outcome<i32, &str, usize> = Forward(0);
assert_eq!(x.ok_map_error(|s| Ok(123)), Err(0));