| use darling::FromDeriveInput; |
| use syn::{parse_quote, Ident, LitStr, Path}; |
| |
| #[derive(Debug, FromDeriveInput)] |
| #[darling(supports(struct_unit), attributes(bar))] |
| pub struct Bar { |
| pub ident: Ident, |
| pub st: Path, |
| pub file: LitStr, |
| } |
| |
| /// Per [#96](https://github.com/TedDriggs/darling/issues/96), make sure that an |
| /// attribute which isn't a valid meta gets an error. |
| /// Properties can be split across multiple attributes; this test ensures that one |
| /// non-meta attribute does not interfere with the parsing of other, well-formed attributes. |
| #[test] |
| fn non_meta_attribute_does_not_block_others() { |
| let di = parse_quote! { |
| #[derive(Bar)] |
| #[bar(st = RocketEngine: Debug)] |
| #[bar(file = "motors/example_6.csv")] |
| pub struct EstesC6; |
| }; |
| |
| let errors: darling::Error = Bar::from_derive_input(&di).unwrap_err().flatten(); |
| // The number of errors here is 2: |
| // - The parsing error caused by a where-clause body where it doesn't belong |
| // - The missing `st` value because the parsing failure blocked that attribute from |
| // being read. |
| assert_eq!(2, errors.len()); |
| } |