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