1 #[cfg(feature = "use_core")]
2 extern crate core;
3
4 #[macro_use]
5 extern crate derivative;
6
7 #[derive(Derivative)]
8 #[derivative(Debug)]
9 #[repr(C, packed)]
10 struct Foo {
11 foo: u8,
12 #[derivative(Debug="ignore")]
13 bar: u8,
14 }
15
16 #[derive(Derivative)]
17 #[derivative(Debug)]
18 #[repr(C, packed)]
19 struct Bar (
20 u8,
21 #[derivative(Debug="ignore")]
22 u8,
23 );
24
25 #[derive(Derivative)]
26 #[derivative(Debug)]
27 #[repr(C, packed)]
28 struct F(#[derivative(Debug="ignore")] isize);
29
30 #[derive(Derivative)]
31 #[derivative(Debug)]
32 #[repr(C, packed)]
33 struct G(isize, #[derivative(Debug="ignore")] isize);
34
35 #[derive(Derivative)]
36 #[derivative(Debug)]
37 #[repr(C, packed)]
38 struct J(#[derivative(Debug="ignore")] NoDebug);
39
40 #[derive(Derivative)]
41 #[derivative(Debug)]
42 #[repr(C, packed)]
43 struct K(isize, #[derivative(Debug="ignore")] NoDebug);
44
45 #[derive(Derivative)]
46 #[derivative(Debug)]
47 #[repr(C, packed)]
48 struct L {
49 #[derivative(Debug="ignore")]
50 foo: NoDebug
51 }
52
53 struct NoDebug;
54
55 trait ToDebug {
to_show(&self) -> String56 fn to_show(&self) -> String;
57 }
58
59 impl<T: std::fmt::Debug> ToDebug for T {
to_show(&self) -> String60 fn to_show(&self) -> String {
61 format!("{:?}", self)
62 }
63 }
64
65 #[test]
main()66 fn main() {
67 assert_eq!(Foo { foo: 42, bar: 1 }.to_show(), "Foo { foo: 42 }".to_string());
68 assert_eq!(Bar(42, 1).to_show(), "Bar(42)".to_string());
69 assert_eq!(F(42).to_show(), "F".to_string());
70 assert_eq!(G(42, 0).to_show(), "G(42)".to_string());
71 assert_eq!(J(NoDebug).to_show(), "J".to_string());
72 assert_eq!(K(42, NoDebug).to_show(), "K(42)".to_string());
73 assert_eq!(L{ foo: NoDebug }.to_show(), "L".to_string());
74 }
75