pub enum Outcome<S, E, F> {
Success(S),
Error(E),
Forward(F),
}Expand description
An enum representing success (Success), error (Error), or forwarding
(Forward).
See the top level documentation for detailed information.
Variants§
Success(S)
Contains the success value.
Error(E)
Contains the error error value.
Forward(F)
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));Source§impl<'r, 'o: 'r> Outcome<Response<'o>, Status, (Data<'o>, Status)>
impl<'r, 'o: 'r> Outcome<Response<'o>, Status, (Data<'o>, Status)>
Sourcepub fn from<R: Responder<'r, 'o>>(
req: &'r Request<'_>,
responder: R,
) -> Outcome<'r>
pub fn from<R: Responder<'r, 'o>>( req: &'r Request<'_>, responder: R, ) -> 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 Error is
returned with the status code.
§Example
use rocket::{Request, Data, route};
fn str_responder<'r>(req: &'r Request, _: Data<'r>) -> route::Outcome<'r> {
route::Outcome::from(req, "Hello, world!")
}Sourcepub fn try_from<R, E>(req: &'r Request<'_>, result: Result<R, E>) -> Outcome<'r>
pub fn try_from<R, E>(req: &'r Request<'_>, result: Result<R, E>) -> 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 Error is
returned with the status code.
§Example
use rocket::{Request, Data, route};
fn str_responder<'r>(req: &'r Request, _: Data<'r>) -> route::Outcome<'r> {
route::Outcome::from(req, "Hello, world!")
}Sourcepub fn error(code: Status) -> Outcome<'r>
pub fn error(code: Status) -> Outcome<'r>
Return an Outcome of Error with the status code code. This is
equivalent to Outcome::Error(code).
This method exists to be used during manual routing.
§Example
use rocket::{Request, Data, route};
use rocket::http::Status;
fn bad_req_route<'r>(_: &'r Request, _: Data<'r>) -> route::Outcome<'r> {
route::Outcome::error(Status::BadRequest)
}Sourcepub fn forward(data: Data<'r>, status: Status) -> Outcome<'r>
pub fn forward(data: Data<'r>, status: Status) -> Outcome<'r>
Return an Outcome of Forward with the data data and status
status. This is equivalent to Outcome::Forward((data, status)).
This method exists to be used during manual routing.
§Example
use rocket::{Request, Data, route};
use rocket::http::Status;
fn always_forward<'r>(_: &'r Request, data: Data<'r>) -> route::Outcome<'r> {
route::Outcome::forward(data, Status::InternalServerError)
}Trait Implementations§
Source§impl<'r, 'o: 'r> IntoOutcome<Outcome<Response<'r>, Status, (Data<'r>, Status)>> for Result<'o>
impl<'r, 'o: 'r> IntoOutcome<Outcome<Response<'r>, Status, (Data<'r>, Status)>> for Result<'o>
Source§impl<S, E> IntoOutcome<Outcome<S, (Status, E), Status>> for Result<S, E>
impl<S, E> IntoOutcome<Outcome<S, (Status, E), Status>> for Result<S, E>
Source§fn or_error(self, error: Status) -> Outcome<S, E>
fn or_error(self, error: Status) -> Outcome<S, E>
self into an Outcome. If self represents a success, an
Outcome::Success is returned. Otherwise, an Outcome::Error is
returned with error as the inner value.Source§fn or_forward(self, status: Status) -> Outcome<S, E>
fn or_forward(self, status: Status) -> Outcome<S, E>
self into an Outcome. If self represents a success, an
Outcome::Success is returned. Otherwise, an Outcome::Forward is
returned with forward as the inner value.Source§impl<S, E, F> IntoOutcome<Outcome<S, E, F>> for Option<S>
impl<S, E, F> IntoOutcome<Outcome<S, E, F>> for Option<S>
Source§fn or_error(self, error: E) -> Outcome<S, E, F>
fn or_error(self, error: E) -> Outcome<S, E, F>
self into an Outcome. If self represents a success, an
Outcome::Success is returned. Otherwise, an Outcome::Error is
returned with error as the inner value.Source§fn or_forward(self, forward: F) -> Outcome<S, E, F>
fn or_forward(self, forward: F) -> Outcome<S, E, F>
self into an Outcome. If self represents a success, an
Outcome::Success is returned. Otherwise, an Outcome::Forward is
returned with forward as the inner value.Source§impl<'r, T: FromData<'r>> IntoOutcome<Outcome<T, (Status, <T as FromData<'r>>::Error), (Data<'r>, Status)>> for Result<T, T::Error>
impl<'r, T: FromData<'r>> IntoOutcome<Outcome<T, (Status, <T as FromData<'r>>::Error), (Data<'r>, Status)>> for Result<T, T::Error>
Source§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>
impl<S: Copy, E: Copy, F: Copy> Copy for Outcome<S, E, F>
impl<S: Eq, E: Eq, F: Eq> Eq for Outcome<S, E, F>
impl<S, E, F> StructuralPartialEq for Outcome<S, E, F>
Auto Trait Implementations§
impl<S, E, F> Freeze for Outcome<S, E, F>
impl<S, E, F> RefUnwindSafe for Outcome<S, E, F>
impl<S, E, F> Send for Outcome<S, E, F>
impl<S, E, F> Sync for Outcome<S, E, F>
impl<S, E, F> Unpin for Outcome<S, E, F>
impl<S, E, F> UnwindSafe for Outcome<S, E, F>
Blanket Implementations§
Source§impl<'a, T> AsTaggedExplicit<'a> for Twhere
T: 'a,
impl<'a, T> AsTaggedExplicit<'a> for Twhere
T: 'a,
Source§impl<'a, T> AsTaggedImplicit<'a> for Twhere
T: 'a,
impl<'a, T> AsTaggedImplicit<'a> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
§impl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);