1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
use TryFrom;
use fmt;
use BitFlags;
use RawBitFlags;
// Coherence doesn't let us use a generic type here. Work around by implementing
// for each integer type manually.
impl_try_from!
/// The error struct used by [`BitFlags::from_bits`]
/// and the [`TryFrom`] implementation`
/// for invalid values.
///
/// ```
/// # use std::convert::TryInto;
/// # use enumflags2::BitFlags;
/// #[derive(Clone, Copy, Debug, BitFlags)]
/// #[repr(u8)]
/// enum MyFlags {
/// A = 0b0001,
/// B = 0b0010,
/// C = 0b0100,
/// D = 0b1000,
/// }
///
/// let result: Result<BitFlags<MyFlags>, _> = 0b10101u8.try_into();
/// assert!(result.is_err());
/// let error = result.unwrap_err();
/// assert_eq!(error.truncate(), MyFlags::C | MyFlags::A);
/// assert_eq!(error.invalid_bits(), 0b10000);
/// ```