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