From acd1a7ea5954a68f39ddbff2231bf64243b70333 Mon Sep 17 00:00:00 2001 From: Taiki Endo Date: Sat, 9 Oct 2021 02:17:25 +0900 Subject: [PATCH] Change Value::Error to &(dyn Error + 'static) (#68) --- tests/tests/value.rs | 7 +++++++ valuable/src/valuable.rs | 2 +- valuable/src/value.rs | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tests/tests/value.rs b/tests/tests/value.rs index bc07546..2c9f0f3 100644 --- a/tests/tests/value.rs +++ b/tests/tests/value.rs @@ -246,6 +246,13 @@ fn test_error() { let error: io::Error = io::ErrorKind::Other.into(); let error: &dyn error::Error = &error; assert_value!(&'a dyn error::Error: Error, as_error, yes => error); + + assert!(error + .as_value() + .as_error() + .unwrap() + .downcast_ref::() + .is_some()); // Check that Value::Error downcast-able } test_num! { diff --git a/valuable/src/valuable.rs b/valuable/src/valuable.rs index e1f8e1d..e8fa5dd 100644 --- a/valuable/src/valuable.rs +++ b/valuable/src/valuable.rs @@ -321,7 +321,7 @@ impl Valuable for std::path::PathBuf { } #[cfg(feature = "std")] -impl Valuable for dyn std::error::Error + '_ { +impl Valuable for dyn std::error::Error + 'static { fn as_value(&self) -> Value<'_> { Value::Error(self) } diff --git a/valuable/src/value.rs b/valuable/src/value.rs index 8b78cc3..70fb9f6 100644 --- a/valuable/src/value.rs +++ b/valuable/src/value.rs @@ -325,7 +325,7 @@ value! { /// let v = Value::Error(&err); /// ``` #[cfg(feature = "std")] - Error(&'a dyn std::error::Error), + Error(&'a (dyn std::error::Error +'static)), /// A Rust list value /// @@ -574,7 +574,7 @@ macro_rules! convert { /// assert!(Value::Bool(true).as_error().is_none()); /// ``` #[cfg(feature = "std")] - pub fn as_error(&self) -> Option<&dyn std::error::Error> { + pub fn as_error(&self) -> Option<&(dyn std::error::Error + 'static)> { match *self { Value::Error(v) => Some(v), _ => None,