#![deny(unused_qualifications)]
#![allow(dead_code)]
use darling::{
ast::{Data, Fields},
FromDeriveInput, FromField, FromVariant,
};
use quote::quote;
use syn::{DeriveInput, Expr, Generics, Ident, Type};
#[derive(FromDeriveInput)]
#[darling(attributes(lints))]
struct Input {
ident: Ident,
generics: Generics,
data: Data<Variant, Field>,
}
#[derive(FromField)]
#[darling(attributes(lints))]
struct Field {
ty: Type,
max_elems: Option<Expr>,
flag: Option<()>,
}
#[derive(FromVariant)]
#[darling(attributes(lints))]
struct Variant {
fields: Fields<Field>,
}
#[test]
fn expansion() {
let input: DeriveInput = syn::parse2(quote! {
struct Example {
hello: String,
}
})
.unwrap();
let parsed = Input::from_derive_input(&input).unwrap();
assert_eq!(parsed.ident, "Example");
assert_eq!(parsed.data.take_struct().unwrap().fields.len(), 1);
}