Make Error Send + Sync (#236)
This commit is contained in:
committed by
GitHub
parent
e92bf0b4bb
commit
2136f00bef
17
src/error.rs
17
src/error.rs
@@ -12,7 +12,7 @@ pub struct Error {
|
||||
kind: ErrorKind,
|
||||
message: Option<String>,
|
||||
url: Option<Url>,
|
||||
source: Option<Box<dyn error::Error>>,
|
||||
source: Option<Box<dyn error::Error + Send + Sync + 'static>>,
|
||||
response: Option<Box<Response>>,
|
||||
}
|
||||
|
||||
@@ -38,7 +38,10 @@ impl Display for Error {
|
||||
|
||||
impl error::Error for Error {
|
||||
fn source(&self) -> Option<&(dyn error::Error + 'static)> {
|
||||
self.source.as_deref()
|
||||
match &self.source {
|
||||
Some(s) => Some(s.as_ref()),
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +61,7 @@ impl Error {
|
||||
self
|
||||
}
|
||||
|
||||
pub(crate) fn src(mut self, e: impl error::Error + 'static) -> Self {
|
||||
pub(crate) fn src(mut self, e: impl error::Error + Send + Sync + 'static) -> Self {
|
||||
self.source = Some(Box::new(e));
|
||||
self
|
||||
}
|
||||
@@ -179,3 +182,11 @@ fn io_error() {
|
||||
err = err.url("http://example.com/".parse().unwrap());
|
||||
assert_eq!(err.to_string(), "http://example.com/: Io: oops: too slow");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn error_is_send_and_sync() {
|
||||
fn takes_send(_: impl Send) {}
|
||||
fn takes_sync(_: impl Sync) {}
|
||||
takes_send(crate::error::ErrorKind::BadUrl.new());
|
||||
takes_sync(crate::error::ErrorKind::BadUrl.new());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user