• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use darling::{FromDeriveInput, FromMeta};
2 use syn::parse_quote;
3 
4 #[derive(Default, FromMeta, PartialEq, Debug)]
5 #[darling(default)]
6 struct Lorem {
7     ipsum: bool,
8     dolor: Option<String>,
9 }
10 
11 #[derive(FromDeriveInput, PartialEq, Debug)]
12 #[darling(attributes(darling_demo))]
13 struct Core {
14     ident: syn::Ident,
15     vis: syn::Visibility,
16     generics: syn::Generics,
17     lorem: Lorem,
18 }
19 
20 #[derive(FromDeriveInput, PartialEq, Debug)]
21 #[darling(attributes(darling_demo))]
22 struct TraitCore {
23     ident: syn::Ident,
24     generics: syn::Generics,
25     lorem: Lorem,
26 }
27 
28 #[test]
simple()29 fn simple() {
30     let di = parse_quote! {
31         #[derive(Foo)]
32         #[darling_demo(lorem(ipsum))]
33         pub struct Bar;
34     };
35 
36     assert_eq!(
37         Core::from_derive_input(&di).unwrap(),
38         Core {
39             ident: parse_quote!(Bar),
40             vis: parse_quote!(pub),
41             generics: Default::default(),
42             lorem: Lorem {
43                 ipsum: true,
44                 dolor: None,
45             },
46         }
47     );
48 }
49 
50 #[test]
trait_type()51 fn trait_type() {
52     let di = parse_quote! {
53         #[derive(Foo)]
54         #[darling_demo(lorem(dolor = "hello"))]
55         pub struct Bar;
56     };
57 
58     assert_eq!(
59         TraitCore::from_derive_input(&di).unwrap(),
60         TraitCore {
61             ident: parse_quote!(Bar),
62             generics: Default::default(),
63             lorem: Lorem {
64                 ipsum: false,
65                 dolor: Some("hello".to_owned()),
66             }
67         }
68     );
69 }
70