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