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.
By set permanent, we indicate the retry must be stopped.
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 with_permanent(self, permanent: bool) -> Self
pub fn with_permanent(self, permanent: bool) -> Self
Set permanent status for error by given permanent.
By set permanent, we indicate the retry must be stopped.
Sourcepub fn with_temporary(self, temporary: bool) -> Self
pub fn with_temporary(self, temporary: bool) -> Self
Set temporary status for error by given temporary.
By set temporary, we indicate this error is retryable.
Sourcepub fn with_persistent(self, persistent: bool) -> Self
pub fn with_persistent(self, persistent: bool) -> Self
Set persistent status for error by given persistent.
By set persistent, we indicate the retry should be stopped.
Sourcepub fn is_permanent(&self) -> bool
pub fn is_permanent(&self) -> bool
Check if this error is permanent.
Sourcepub fn is_temporary(&self) -> bool
pub fn is_temporary(&self) -> bool
Check if this error is temporary.
Sourcepub fn is_persistent(&self) -> bool
pub fn is_persistent(&self) -> bool
Check if this error is persistent.
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
use the Display impl or to_string()