pub struct Error { /* private fields */ }
Expand description
Error is the error struct returned by all opendal functions.
§Display
Error can be displayed in two ways:
- Via
Display
: likeerr.to_string()
orformat!("{err}")
Error will be printed in a single line:
Unexpected, context: { path: /path/to/file, called: send_async } => something wrong happened, source: networking error"
- Via
Debug
: likeformat!("{err:?}")
Error will be printed in multi lines with more details and backtraces (if captured):
Unexpected => something wrong happened
Context:
path: /path/to/file
called: send_async
Source: networking error
Backtrace:
0: opendal::error::Error::new
at ./src/error.rs:197:24
1: opendal::error::tests::generate_error
at ./src/error.rs:241:9
2: opendal::error::tests::test_error_debug_with_backtrace::{{closure}}
at ./src/error.rs:305:41
...
- For conventional struct-style Debug representation, like
format!("{err:#?}")
:
Error {
kind: Unexpected,
message: "something wrong happened",
status: Permanent,
operation: "Read",
context: [
(
"path",
"/path/to/file",
),
(
"called",
"send_async",
),
],
source: Some(
"networking error",
),
}
Implementations§
Source§impl Error
impl Error
Sourcepub fn new(kind: ErrorKind, message: impl Into<String>) -> Self
pub fn new(kind: ErrorKind, message: impl Into<String>) -> Self
Create a new Error with error kind and message.
Sourcepub fn with_operation(self, operation: impl Into<&'static str>) -> Self
pub fn with_operation(self, operation: impl Into<&'static str>) -> Self
Update error’s operation.
§Notes
If the error already carries an operation, we will push a new context
(called, operation)
.
Sourcepub fn with_context(self, key: &'static str, value: impl ToString) -> Self
pub fn with_context(self, key: &'static str, value: impl ToString) -> Self
Add more context in error.
Sourcepub fn set_source(self, src: impl Into<Error>) -> Self
pub fn set_source(self, src: impl Into<Error>) -> Self
Sourcepub fn set_permanent(self) -> Self
pub fn set_permanent(self) -> Self
Set permanent status for error.
Sourcepub fn set_temporary(self) -> Self
pub fn set_temporary(self) -> Self
Set temporary status for error.
By set temporary, we indicate this error is retryable.
Sourcepub fn set_persistent(self) -> Self
pub fn set_persistent(self) -> Self
Set persistent status for error.
By setting persistent, we indicate the retry should be stopped.
Sourcepub fn is_temporary(&self) -> bool
pub fn is_temporary(&self) -> bool
Check if this error is temporary.
Sourcepub fn backtrace(&self) -> Option<&Backtrace>
pub fn backtrace(&self) -> Option<&Backtrace>
Return error’s backtrace.
Note: the standard way of exposing backtrace is the unstable feature error_generic_member_access
.
We don’t provide it as it requires nightly rust.
If you just want to print error with backtrace, use Debug
, like format!("{err:?}")
.
If you use nightly rust, and want to access opendal::Error
’s backtrace in the standard way, you can
implement a newtype like this:
// assume you already have `#![feature(error_generic_member_access)]` on the top of your crate
#[derive(::std::fmt::Debug)]
pub struct OpendalError(opendal::Error);
impl std::fmt::Display for OpendalError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.0.fmt(f)
}
}
impl std::error::Error for OpendalError {
fn provide<'a>(&'a self, request: &mut std::error::Request<'a>) {
if let Some(bt) = self.0.backtrace() {
request.provide_ref::<std::backtrace::Backtrace>(bt);
}
}
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
self.0.source()
}
}
Additionally, you can add a clippy lint to prevent usage of the original opendal::Error
type.
disallowed-types = [
{ path = "opendal::Error", reason = "Please use `my_crate::OpendalError` instead." },
]
Trait Implementations§
Source§impl Error for Error
impl Error for Error
Source§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
Auto Trait Implementations§
impl Freeze for Error
impl RefUnwindSafe for Error
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl UnwindSafe for Error
Blanket Implementations§
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> 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>
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ServiceExt for T
impl<T> ServiceExt for T
Source§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
Source§fn decompression(self) -> Decompression<Self>where
Self: Sized,
fn decompression(self) -> Decompression<Self>where
Self: Sized,
Source§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
Source§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
Source§fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string
, but without panic on OOM.