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