Skip to content

Commit bfda89e

Browse files
hawkwkaffarell
authored andcommitted
core: add Value impl for Box<T> where T: Value (tokio-rs#2071)
This commit adds a `Value` implementation for `Box<T> where T: Value`. This is *primarily* intended to make `Box<dyn Error + ...>` implement `Value`, building on the `Value` impls for `dyn Error + ...` added in tokio-rs#2066, but it may be useful for other boxed values as well. Refs: tokio-rs#1308
1 parent 903258e commit bfda89e

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

tracing-core/src/field.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,4 +1299,24 @@ mod test {
12991299
});
13001300
assert_eq!(result, format!("{}", r#"[61 62 63]" "[c0 ff ee]"#));
13011301
}
1302+
1303+
#[test]
1304+
#[cfg(feature = "std")]
1305+
fn record_error() {
1306+
let fields = TEST_META_1.fields();
1307+
let err: Box<dyn std::error::Error + Send + Sync + 'static> =
1308+
std::io::Error::new(std::io::ErrorKind::Other, "lol").into();
1309+
let values = &[
1310+
(&fields.field("foo").unwrap(), Some(&err as &dyn Value)),
1311+
(&fields.field("bar").unwrap(), Some(&Empty as &dyn Value)),
1312+
(&fields.field("baz").unwrap(), Some(&Empty as &dyn Value)),
1313+
];
1314+
let valueset = fields.value_set(values);
1315+
let mut result = String::new();
1316+
valueset.record(&mut |_: &Field, value: &dyn fmt::Debug| {
1317+
use core::fmt::Write;
1318+
write!(&mut result, "{:?}", value).unwrap();
1319+
});
1320+
assert_eq!(result, format!("{}", err));
1321+
}
13021322
}

0 commit comments

Comments
 (0)