Skip to main content

IoContext

Struct IoContext 

Source
pub struct IoContext {
    pub context: &'static str,
    pub detail: String,
}
Expand description

Pairs a static, non-path-bearing summary with the dynamic detail of an I/O failure constructed via [std::io::Error::other].

FFI bindings redact ArchiveError::Io messages down to their std::io::ErrorKind description in release builds, since free-form messages have no structured path field to sanitize. For errors built from ErrorKind::Other, that redaction collapses to the fixed string “other error”, discarding all diagnostic value. Wrapping the detail in IoContext lets bindings recognize the error (via std::io::Error::get_ref and downcasting) and surface context instead — safe to show even in release builds because it is always a &'static str fixed at the call site, never built from path or archive entry data.

§Examples

use exarch_core::IoContext;
use std::io;

let err = io::Error::other(IoContext::new(
    "failed to read entry metadata",
    "/tmp/x: denied",
));
assert_eq!(
    err.to_string(),
    "failed to read entry metadata: /tmp/x: denied"
);

let ctx = err
    .get_ref()
    .and_then(|inner| inner.downcast_ref::<IoContext>())
    .expect("IoContext downcast");
assert_eq!(ctx.context, "failed to read entry metadata");

Fields§

§context: &'static str

Static summary of the failure. Never carries path or archive entry data — safe to surface in release builds.

§detail: String

Full dynamic detail (may embed a host path). Shown only in debug builds via ArchiveError::Io’s Display.

Implementations§

Source§

impl IoContext

Source

pub fn new(context: &'static str, detail: impl Into<String>) -> Self

Creates a new IoContext pairing a static summary with dynamic detail.

§Examples
use exarch_core::IoContext;

let ctx = IoContext::new("failed to start file in zip archive", "boom");
assert_eq!(ctx.context, "failed to start file in zip archive");
assert_eq!(ctx.detail, "boom");

Trait Implementations§

Source§

impl Debug for IoContext

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for IoContext

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for IoContext

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.