1 #![allow(dead_code)]
2 
3 use std::fmt::{self, Display};
4 use std::io;
5 use thiserror::Error;
6 
7 macro_rules! unimplemented_display {
8     ($ty:ty) => {
9         impl Display for $ty {
10             fn fmt(&self, _formatter: &mut fmt::Formatter) -> fmt::Result {
11                 unimplemented!()
12             }
13         }
14     };
15 }
16 
17 #[derive(Error, Debug)]
18 struct BracedError {
19     msg: String,
20     pos: usize,
21 }
22 
23 #[derive(Error, Debug)]
24 struct TupleError(String, usize);
25 
26 #[derive(Error, Debug)]
27 struct UnitError;
28 
29 #[derive(Error, Debug)]
30 struct WithSource {
31     #[source]
32     cause: io::Error,
33 }
34 
35 #[derive(Error, Debug)]
36 struct WithAnyhow {
37     #[source]
38     cause: anyhow::Error,
39 }
40 
41 #[derive(Error, Debug)]
42 enum EnumError {
43     Braced {
44         #[source]
45         cause: io::Error,
46     },
47     Tuple(#[source] io::Error),
48     Unit,
49 }
50 
51 unimplemented_display!(BracedError);
52 unimplemented_display!(TupleError);
53 unimplemented_display!(UnitError);
54 unimplemented_display!(WithSource);
55 unimplemented_display!(WithAnyhow);
56 unimplemented_display!(EnumError);
57