Struct ErrorList
pub struct ErrorList { /* private fields */ }Expand description
Several failures reported as one error, such as every attempt of a race or every resolver of a fallback chain.
One of them is the primary failure: it is the Error::source, so
error_chain and code that classifies an error by its
chain keep working as for a single failure. By default the first pushed
error is primary; ErrorList::push_primary picks another one.
CauseExt searches every failure in the list, not only
the primary one.
{} renders the failures on one line, {:#} renders each with its own
cause chain. Both escape control characters and write at most 64 errors,
nested lists included.
use rama_error::{BoxError, BoxErrorExt, CauseExt, ErrorList};
let mut errors = ErrorList::new();
errors.push(BoxError::from_static_str("refused"));
errors.push(std::fmt::Error);
assert_eq!(errors.len(), 2);
assert_eq!(errors.to_string(), "2 errors: refused; an error occurred when formatting an argument");
assert!(errors.has_cause::<std::fmt::Error>());Implementations§
§impl ErrorList
impl ErrorList
pub fn with_capacity(capacity: usize) -> ErrorList
pub fn with_capacity(capacity: usize) -> ErrorList
An empty list with room for capacity failures.
pub fn push_primary(&mut self, error: impl Into<Box<dyn Error + Send + Sync>>)
pub fn push_primary(&mut self, error: impl Into<Box<dyn Error + Send + Sync>>)
Add a failure and make it the primary one.
pub fn iter(&self) -> impl ExactSizeIterator
pub fn iter(&self) -> impl ExactSizeIterator
Every failure, in the order they were added.
Trait Implementations§
§impl Error for ErrorList
impl Error for ErrorList
§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
§impl<E> Extend<E> for ErrorList
impl<E> Extend<E> for ErrorList
§fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = E>,
fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = E>,
Source§fn extend_one(&mut self, item: T)
fn extend_one(&mut self, item: T)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Auto Trait Implementations§
impl !RefUnwindSafe for ErrorList
impl !UnwindSafe for ErrorList
impl Freeze for ErrorList
impl Send for ErrorList
impl Sync for ErrorList
impl Unpin for ErrorList
impl UnsafeUnpin for ErrorList
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> 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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<E> CauseExt for Ewhere
E: Error + 'static,
impl<E> CauseExt for Ewhere
E: Error + 'static,
§fn has_cause<T>(&self) -> boolwhere
T: Error + 'static,
fn has_cause<T>(&self) -> boolwhere
T: Error + 'static,
T.§fn find_cause<T>(&self) -> Option<&T>where
T: Error + 'static,
fn find_cause<T>(&self) -> Option<&T>where
T: Error + 'static,
T, starting with this error itself.§fn any_cause(
&self,
predicate: impl FnMut(&(dyn Error + 'static)) -> bool,
) -> bool
fn any_cause( &self, predicate: impl FnMut(&(dyn Error + 'static)) -> bool, ) -> bool
predicate holds for this error or one of its causes, visited
in the same order and within the same bound as Self::find_cause.§fn root_cause(&self) -> &(dyn Error + 'static)
fn root_cause(&self) -> &(dyn Error + 'static)
§fn context_fields(&self) -> impl Iterator<Item = &ContextField>
fn context_fields(&self) -> impl Iterator<Item = &ContextField>
error_chain: through an ErrorList only its
primary failure.§fn context_value<T>(&self, key: &str) -> Option<&T>where
T: Any,
fn context_value<T>(&self, key: &str) -> Option<&T>where
T: Any,
T
(see ContextField::downcast_ref), searched as Self::context_fields.§impl<Error> ErrorExt for Error
impl<Error> ErrorExt for Error
§fn into_box_error(self) -> Box<dyn Error + Send + Sync>
fn into_box_error(self) -> Box<dyn Error + Send + Sync>
BoxError without additional context.§fn into_opaque_error(self) -> OpaqueError
fn into_opaque_error(self) -> OpaqueError
OpaqueError without additional context. Read more§fn context_debug<M>(self, value: M) -> Box<dyn Error + Send + Sync>
fn context_debug<M>(self, value: M) -> Box<dyn Error + Send + Sync>
fmt::Debug as fmt::Display.§fn context_field<M>(
self,
key: &'static str,
value: M,
) -> Box<dyn Error + Send + Sync>
fn context_field<M>( self, key: &'static str, value: M, ) -> Box<dyn Error + Send + Sync>
§fn context_str_field<M>(
self,
key: &'static str,
value: M,
) -> Box<dyn Error + Send + Sync>
fn context_str_field<M>( self, key: &'static str, value: M, ) -> Box<dyn Error + Send + Sync>
Self::context_field but using a string-like value,
this is useful in case you need to pass a string slice which is borrowed
and thus cannot be passed as part of ’static error.§fn context_debug_field<M>(
self,
key: &'static str,
value: M,
) -> Box<dyn Error + Send + Sync>
fn context_debug_field<M>( self, key: &'static str, value: M, ) -> Box<dyn Error + Send + Sync>
fmt::Debug as fmt::Display.§fn with_context<C, F>(self, cb: F) -> Box<dyn Error + Send + Sync>
fn with_context<C, F>(self, cb: F) -> Box<dyn Error + Send + Sync>
§fn with_context_debug<C, F>(self, cb: F) -> Box<dyn Error + Send + Sync>
fn with_context_debug<C, F>(self, cb: F) -> Box<dyn Error + Send + Sync>
fmt::Debug as fmt::Display.§fn with_context_field<C, F>(
self,
key: &'static str,
cb: F,
) -> Box<dyn Error + Send + Sync>
fn with_context_field<C, F>( self, key: &'static str, cb: F, ) -> Box<dyn Error + Send + Sync>
§fn with_context_str_field<C, F>(
self,
key: &'static str,
cb: F,
) -> Box<dyn Error + Send + Sync>
fn with_context_str_field<C, F>( self, key: &'static str, cb: F, ) -> Box<dyn Error + Send + Sync>
Self::with_context_field but using a string-like value,
this is useful in case you need to pass a string slice which is borrowed
and thus cannot be passed as part of ’static error.§fn with_context_debug_field<C, F>(
self,
key: &'static str,
cb: F,
) -> Box<dyn Error + Send + Sync>
fn with_context_debug_field<C, F>( self, key: &'static str, cb: F, ) -> Box<dyn Error + Send + Sync>
fmt::Debug as fmt::Display.§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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 more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a rama_grpc::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more§impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
type Error = <U as RamaTryFrom<T, CrateMarker>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.