1 #![deny(clippy::all, clippy::pedantic)]
2
3 use std::io;
4 use thiserror::Error;
5
6 #[derive(Error, Debug)]
7 #[error("...")]
8 pub struct ErrorStruct {
9 #[from]
10 source: io::Error,
11 }
12
13 #[derive(Error, Debug)]
14 #[error("...")]
15 pub struct ErrorStructOptional {
16 #[from]
17 source: Option<io::Error>,
18 }
19
20 #[derive(Error, Debug)]
21 #[error("...")]
22 pub struct ErrorTuple(#[from] io::Error);
23
24 #[derive(Error, Debug)]
25 #[error("...")]
26 pub struct ErrorTupleOptional(#[from] Option<io::Error>);
27
28 #[derive(Error, Debug)]
29 #[error("...")]
30 pub enum ErrorEnum {
31 Test {
32 #[from]
33 source: io::Error,
34 },
35 }
36
37 #[derive(Error, Debug)]
38 #[error("...")]
39 pub enum ErrorEnumOptional {
40 Test {
41 #[from]
42 source: Option<io::Error>,
43 },
44 }
45
46 #[derive(Error, Debug)]
47 #[error("...")]
48 pub enum Many {
49 Any(#[from] anyhow::Error),
50 Io(#[from] io::Error),
51 }
52
assert_impl<T: From<io::Error>>()53 fn assert_impl<T: From<io::Error>>() {}
54
55 #[test]
test_from()56 fn test_from() {
57 assert_impl::<ErrorStruct>();
58 assert_impl::<ErrorStructOptional>();
59 assert_impl::<ErrorTuple>();
60 assert_impl::<ErrorTupleOptional>();
61 assert_impl::<ErrorEnum>();
62 assert_impl::<ErrorEnumOptional>();
63 assert_impl::<Many>();
64 }
65