1 #[macro_use]
2 extern crate darling;
3 extern crate syn;
4 
5 use darling::FromDeriveInput;
6 
parse<T: FromDeriveInput>(src: &str) -> T7 fn parse<T: FromDeriveInput>(src: &str) -> T {
8     let ast = syn::parse_str(src).unwrap();
9     FromDeriveInput::from_derive_input(&ast).unwrap()
10 }
11 
12 #[derive(FromMeta, PartialEq, Eq, Debug)]
13 enum Volume {
14     Whisper,
15     Talk,
16     Shout,
17 }
18 
19 #[derive(FromDeriveInput)]
20 #[darling(attributes(speak))]
21 struct SpeakingOptions<T: Default, U> {
22     max_volume: U,
23     #[darling(skip)]
24     #[allow(dead_code)]
25     additional_data: T,
26 }
27 
28 #[derive(Default)]
29 struct Phoneme {
30     #[allow(dead_code)]
31     first: String,
32 }
33 
34 #[test]
skipped_field()35 fn skipped_field() {
36     let parsed: SpeakingOptions<Phoneme, Volume> = parse(
37         r#"
38         #[derive(Speak)]
39         #[speak(max_volume = "shout")]
40         enum HtmlElement {
41             Div(String)
42         }
43     "#,
44     );
45     assert_eq!(parsed.max_volume, Volume::Shout);
46 }
47