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