pub trait ResultAtExt<T, E> {
// Required methods
fn at(self) -> Result<T, At<E>>;
fn at_str(self, msg: &'static str) -> Result<T, At<E>>;
fn at_string(self, f: impl FnOnce() -> String) -> Result<T, At<E>>;
fn at_data<C>(self, f: impl FnOnce() -> C) -> Result<T, At<E>>
where C: Display + Send + Sync + 'static;
fn at_debug<C>(self, f: impl FnOnce() -> C) -> Result<T, At<E>>
where C: Debug + Send + Sync + 'static;
fn at_aside_error<Err>(self, err: Err) -> Result<T, At<E>>
where Err: Error + Send + Sync + 'static;
fn at_error<Err>(self, err: Err) -> Result<T, At<E>>
where Err: Error + Send + Sync + 'static;
fn at_crate(self, info: &'static AtCrateInfo) -> Result<T, At<E>>;
fn at_fn<F>(self, marker: F) -> Result<T, At<E>>
where F: Fn();
fn at_named(self, name: &'static str) -> Result<T, At<E>>;
fn map_err_at<E2, F>(self, f: F) -> Result<T, At<E2>>
where F: FnOnce(E) -> E2;
}Expand description
Extension trait for adding location tracking to Result<T, At<E>>.
§Example
use whereat::{at, At, ResultAtExt};
#[derive(Debug)]
enum MyError { Oops }
fn inner() -> Result<(), At<MyError>> {
Err(at(MyError::Oops))
}
fn outer() -> Result<(), At<MyError>> {
inner().at()?;
Ok(())
}Required Methods§
Sourcefn at_str(self, msg: &'static str) -> Result<T, At<E>>
fn at_str(self, msg: &'static str) -> Result<T, At<E>>
Add static string context to last location (or create one if empty).
Sourcefn at_string(self, f: impl FnOnce() -> String) -> Result<T, At<E>>
fn at_string(self, f: impl FnOnce() -> String) -> Result<T, At<E>>
Add lazily-computed string context to last location (or create one if empty).
Sourcefn at_data<C>(self, f: impl FnOnce() -> C) -> Result<T, At<E>>
fn at_data<C>(self, f: impl FnOnce() -> C) -> Result<T, At<E>>
Add lazily-computed typed context (Display) to last location (or create one if empty).
Sourcefn at_debug<C>(self, f: impl FnOnce() -> C) -> Result<T, At<E>>
fn at_debug<C>(self, f: impl FnOnce() -> C) -> Result<T, At<E>>
Add lazily-computed typed context (Debug) to last location (or create one if empty).
Sourcefn at_aside_error<Err>(self, err: Err) -> Result<T, At<E>>
fn at_aside_error<Err>(self, err: Err) -> Result<T, At<E>>
Attach a related error as diagnostic context on the last frame.
The attached error is not part of the .source() chain — it is only
visible via trace display and .contexts() iteration.
Sourcefn at_error<Err>(self, err: Err) -> Result<T, At<E>>
👎Deprecated since 0.1.4: Renamed to at_aside_error(). The attached error is NOT part of the .source() chain.
fn at_error<Err>(self, err: Err) -> Result<T, At<E>>
Renamed to at_aside_error(). The attached error is NOT part of the .source() chain.
Attach an error as diagnostic context (not in .source() chain).
Sourcefn at_crate(self, info: &'static AtCrateInfo) -> Result<T, At<E>>
fn at_crate(self, info: &'static AtCrateInfo) -> Result<T, At<E>>
Add crate boundary marker to last location (or create one if empty).
Sourcefn at_fn<F>(self, marker: F) -> Result<T, At<E>>where
F: Fn(),
fn at_fn<F>(self, marker: F) -> Result<T, At<E>>where
F: Fn(),
Add a location frame with the caller’s function name as context.
Captures both file:line:col AND the function name at zero runtime cost.
Pass an empty closure || {} - its type includes the parent function name.
Sourcefn at_named(self, name: &'static str) -> Result<T, At<E>>
fn at_named(self, name: &'static str) -> Result<T, At<E>>
Add a location frame with an explicit name as context.
Like at_fn but with an explicit label.
Sourcefn map_err_at<E2, F>(self, f: F) -> Result<T, At<E2>>where
F: FnOnce(E) -> E2,
fn map_err_at<E2, F>(self, f: F) -> Result<T, At<E2>>where
F: FnOnce(E) -> E2,
Convert the error type while preserving the trace.
This is a convenience method that combines map_err with At::map_error.
§Example
use whereat::{at, At, ResultAtExt};
#[derive(Debug)]
struct InternalError;
#[derive(Debug)]
struct PublicError;
fn internal() -> Result<(), At<InternalError>> {
Err(at(InternalError))
}
fn public() -> Result<(), At<PublicError>> {
// Clean conversion that preserves trace
internal().map_err_at(|_| PublicError)?;
Ok(())
}Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
Source§impl<T, E> ResultAtExt<T, E> for Result<T, At<E>>
impl<T, E> ResultAtExt<T, E> for Result<T, At<E>>
fn at(self) -> Result<T, At<E>>
fn at_str(self, msg: &'static str) -> Result<T, At<E>>
fn at_string(self, f: impl FnOnce() -> String) -> Result<T, At<E>>
fn at_data<C>(self, f: impl FnOnce() -> C) -> Result<T, At<E>>
fn at_debug<C>(self, f: impl FnOnce() -> C) -> Result<T, At<E>>
fn at_aside_error<Err>(self, err: Err) -> Result<T, At<E>>
Source§fn at_error<Err>(self, err: Err) -> Result<T, At<E>>
fn at_error<Err>(self, err: Err) -> Result<T, At<E>>
Renamed to at_aside_error(). The attached error is NOT part of the .source() chain.