1 use ref_cast::RefCast;
2 use std::fmt::Display;
3 use std::path::{Path, PathBuf};
4 use thiserror::Error;
5 
6 #[derive(Error, Debug)]
7 #[error("failed to read '{file}'")]
8 struct StructPathBuf {
9     file: PathBuf,
10 }
11 
12 #[derive(Error, Debug, RefCast)]
13 #[repr(C)]
14 #[error("failed to read '{file}'")]
15 struct StructPath {
16     file: Path,
17 }
18 
19 #[derive(Error, Debug)]
20 enum EnumPathBuf {
21     #[error("failed to read '{0}'")]
22     Read(PathBuf),
23 }
24 
assert<T: Display>(expected: &str, value: T)25 fn assert<T: Display>(expected: &str, value: T) {
26     assert_eq!(expected, value.to_string());
27 }
28 
29 #[test]
test_display()30 fn test_display() {
31     let path = Path::new("/thiserror");
32     let file = path.to_owned();
33     assert("failed to read '/thiserror'", StructPathBuf { file });
34     let file = path.to_owned();
35     assert("failed to read '/thiserror'", EnumPathBuf::Read(file));
36     assert("failed to read '/thiserror'", StructPath::ref_cast(path));
37 }
38