1 #![allow(dead_code)]
2 #![cfg(feature = "suggestions")]
3 
4 use darling::{FromDeriveInput, FromMeta};
5 use syn::parse_quote;
6 
7 #[derive(Debug, FromDeriveInput)]
8 #[darling(attributes(suggest))]
9 struct Lorem {
10     ipsum: String,
11     dolor: Dolor,
12     // This field is included to make sure that skipped fields aren't suggested.
13     #[darling(skip)]
14     amet: bool,
15 }
16 
17 #[derive(Debug, FromMeta)]
18 struct Dolor {
19     sit: bool,
20 }
21 
22 #[test]
suggest_dolor()23 fn suggest_dolor() {
24     let input: syn::DeriveInput = parse_quote! {
25         #[suggest(ipsum = "Hello", dolorr(sit))]
26         pub struct Foo;
27     };
28 
29     let result = Lorem::from_derive_input(&input).unwrap_err();
30     assert_eq!(2, result.len());
31     assert!(format!("{}", result).contains("Did you mean"));
32 }
33 
34 #[test]
dont_suggest_skipped_field()35 fn dont_suggest_skipped_field() {
36     let input: syn::DeriveInput = parse_quote! {
37         #[suggest(ipsum = "Hello", dolor(sit), amt)]
38         pub struct Foo;
39     };
40 
41     let result = Lorem::from_derive_input(&input).unwrap_err();
42     assert_eq!(1, result.len());
43     assert!(!format!("{}", result).contains("amet"));
44 }
45