1 #![cfg_attr(thiserror_nightly_testing, feature(error_generic_member_access))]
2 
3 #[cfg(thiserror_nightly_testing)]
4 pub mod structs {
5     use std::backtrace::Backtrace;
6     use thiserror::Error;
7 
8     #[derive(Error, Debug)]
9     #[error("...")]
10     pub struct OptSourceNoBacktrace {
11         #[source]
12         source: Option<anyhow::Error>,
13     }
14 
15     #[derive(Error, Debug)]
16     #[error("...")]
17     pub struct OptSourceAlwaysBacktrace {
18         #[source]
19         source: Option<anyhow::Error>,
20         backtrace: Backtrace,
21     }
22 
23     #[derive(Error, Debug)]
24     #[error("...")]
25     pub struct NoSourceOptBacktrace {
26         #[backtrace]
27         backtrace: Option<Backtrace>,
28     }
29 
30     #[derive(Error, Debug)]
31     #[error("...")]
32     pub struct AlwaysSourceOptBacktrace {
33         source: anyhow::Error,
34         #[backtrace]
35         backtrace: Option<Backtrace>,
36     }
37 
38     #[derive(Error, Debug)]
39     #[error("...")]
40     pub struct OptSourceOptBacktrace {
41         #[source]
42         source: Option<anyhow::Error>,
43         #[backtrace]
44         backtrace: Option<Backtrace>,
45     }
46 }
47 
48 #[cfg(thiserror_nightly_testing)]
49 pub mod enums {
50     use std::backtrace::Backtrace;
51     use thiserror::Error;
52 
53     #[derive(Error, Debug)]
54     pub enum OptSourceNoBacktrace {
55         #[error("...")]
56         Test {
57             #[source]
58             source: Option<anyhow::Error>,
59         },
60     }
61 
62     #[derive(Error, Debug)]
63     pub enum OptSourceAlwaysBacktrace {
64         #[error("...")]
65         Test {
66             #[source]
67             source: Option<anyhow::Error>,
68             backtrace: Backtrace,
69         },
70     }
71 
72     #[derive(Error, Debug)]
73     pub enum NoSourceOptBacktrace {
74         #[error("...")]
75         Test {
76             #[backtrace]
77             backtrace: Option<Backtrace>,
78         },
79     }
80 
81     #[derive(Error, Debug)]
82     pub enum AlwaysSourceOptBacktrace {
83         #[error("...")]
84         Test {
85             source: anyhow::Error,
86             #[backtrace]
87             backtrace: Option<Backtrace>,
88         },
89     }
90 
91     #[derive(Error, Debug)]
92     pub enum OptSourceOptBacktrace {
93         #[error("...")]
94         Test {
95             #[source]
96             source: Option<anyhow::Error>,
97             #[backtrace]
98             backtrace: Option<Backtrace>,
99         },
100     }
101 }
102 
103 #[test]
104 #[cfg_attr(not(thiserror_nightly_testing), ignore)]
test_option()105 fn test_option() {}
106