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