1 #![cfg_attr(thiserror_nightly_testing, feature(backtrace))]
5 #[derive(Error, Debug)]
9 #[cfg(thiserror_nightly_testing)]
12 use std
::backtrace
::Backtrace
;
13 use std
::error
::Error
;
17 #[derive(Error, Debug)]
19 pub struct PlainBacktrace
{
23 #[derive(Error, Debug)]
25 pub struct ExplicitBacktrace
{
30 #[derive(Error, Debug)]
32 pub struct OptBacktrace
{
34 backtrace
: Option
<Backtrace
>,
37 #[derive(Error, Debug)]
39 pub struct ArcBacktrace
{
41 backtrace
: Arc
<Backtrace
>,
44 #[derive(Error, Debug)]
46 pub struct BacktraceFrom
{
53 #[derive(Error, Debug)]
55 pub struct OptBacktraceFrom
{
59 backtrace
: Option
<Backtrace
>,
62 #[derive(Error, Debug)]
64 pub struct ArcBacktraceFrom
{
68 backtrace
: Arc
<Backtrace
>,
73 let error
= PlainBacktrace
{
74 backtrace
: Backtrace
::capture(),
76 assert
!(error
.backtrace().is_some());
78 let error
= ExplicitBacktrace
{
79 backtrace
: Backtrace
::capture(),
81 assert
!(error
.backtrace().is_some());
83 let error
= OptBacktrace
{
84 backtrace
: Some(Backtrace
::capture()),
86 assert
!(error
.backtrace().is_some());
88 let error
= ArcBacktrace
{
89 backtrace
: Arc
::new(Backtrace
::capture()),
91 assert
!(error
.backtrace().is_some());
93 let error
= BacktraceFrom
::from(Inner
);
94 assert
!(error
.backtrace().is_some());
96 let error
= OptBacktraceFrom
::from(Inner
);
97 assert
!(error
.backtrace().is_some());
99 let error
= ArcBacktraceFrom
::from(Inner
);
100 assert
!(error
.backtrace().is_some());
104 #[cfg(thiserror_nightly_testing)]
107 use std
::backtrace
::Backtrace
;
108 use std
::error
::Error
;
110 use thiserror
::Error
;
112 #[derive(Error, Debug)]
113 pub enum PlainBacktrace
{
115 Test { backtrace: Backtrace }
,
118 #[derive(Error, Debug)]
119 pub enum ExplicitBacktrace
{
123 backtrace
: Backtrace
,
127 #[derive(Error, Debug)]
128 pub enum OptBacktrace
{
132 backtrace
: Option
<Backtrace
>,
136 #[derive(Error, Debug)]
137 pub enum ArcBacktrace
{
141 backtrace
: Arc
<Backtrace
>,
145 #[derive(Error, Debug)]
146 pub enum BacktraceFrom
{
152 backtrace
: Backtrace
,
156 #[derive(Error, Debug)]
157 pub enum OptBacktraceFrom
{
163 backtrace
: Option
<Backtrace
>,
167 #[derive(Error, Debug)]
168 pub enum ArcBacktraceFrom
{
174 backtrace
: Arc
<Backtrace
>,
179 fn test_backtrace() {
180 let error
= PlainBacktrace
::Test
{
181 backtrace
: Backtrace
::capture(),
183 assert
!(error
.backtrace().is_some());
185 let error
= ExplicitBacktrace
::Test
{
186 backtrace
: Backtrace
::capture(),
188 assert
!(error
.backtrace().is_some());
190 let error
= OptBacktrace
::Test
{
191 backtrace
: Some(Backtrace
::capture()),
193 assert
!(error
.backtrace().is_some());
195 let error
= ArcBacktrace
::Test
{
196 backtrace
: Arc
::new(Backtrace
::capture()),
198 assert
!(error
.backtrace().is_some());
200 let error
= BacktraceFrom
::from(Inner
);
201 assert
!(error
.backtrace().is_some());
203 let error
= OptBacktraceFrom
::from(Inner
);
204 assert
!(error
.backtrace().is_some());
206 let error
= ArcBacktraceFrom
::from(Inner
);
207 assert
!(error
.backtrace().is_some());
212 #[cfg_attr(not(thiserror_nightly_testing), ignore)]
213 fn test_backtrace() {}