1 // The use of fields in debug print commands does not count as "used",
2 // which causes the fields to trigger an unwanted dead code warning.
3 #![allow(dead_code)]
4
5 use darling::{ast, util, FromDeriveInput, FromField};
6 use syn::{Ident, Type};
7
8 #[derive(Debug, FromField)]
9 #[darling(attributes(lorem))]
10 pub struct LoremField {
11 ident: Option<Ident>,
12 ty: Type,
13 #[darling(default)]
14 skip: bool,
15 }
16
17 #[derive(Debug, FromDeriveInput)]
18 #[darling(attributes(lorem), supports(struct_named))]
19 pub struct Lorem {
20 ident: Ident,
21 data: ast::Data<util::Ignored, LoremField>,
22 }
23
main()24 fn main() {
25 let good_input = r#"#[derive(Lorem)]
26 pub struct Foo {
27 #[lorem(skip)]
28 bar: bool,
29
30 baz: i64,
31 }"#;
32
33 let bad_input = r#"#[derive(Lorem)]
34 pub struct BadFoo(String, u32);"#;
35
36 let parsed = syn::parse_str(good_input).unwrap();
37 let receiver = Lorem::from_derive_input(&parsed).unwrap();
38 let wrong_shape_parsed = syn::parse_str(bad_input).unwrap();
39 let wrong_shape = Lorem::from_derive_input(&wrong_shape_parsed).expect_err("Shape was wrong");
40
41 println!(
42 r#"
43 INPUT:
44
45 {}
46
47 PARSED AS:
48
49 {:?}
50
51 BAD INPUT:
52
53 {}
54
55 PRODUCED ERROR:
56
57 {}
58 "#,
59 good_input, receiver, bad_input, wrong_shape
60 );
61 }
62