mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-25 02:53:35 +00:00
76 lines
1.5 KiB
Rust
76 lines
1.5 KiB
Rust
#[macro_use]
|
|
extern crate darling;
|
|
#[macro_use]
|
|
extern crate syn;
|
|
#[macro_use]
|
|
extern crate quote;
|
|
|
|
use darling::FromDeriveInput;
|
|
|
|
#[derive(Default, FromMeta, PartialEq, Debug)]
|
|
#[darling(default)]
|
|
struct Lorem {
|
|
ipsum: bool,
|
|
dolor: Option<String>,
|
|
}
|
|
|
|
#[derive(FromDeriveInput, PartialEq, Debug)]
|
|
#[darling(attributes(darling_demo))]
|
|
struct Core {
|
|
ident: syn::Ident,
|
|
vis: syn::Visibility,
|
|
generics: syn::Generics,
|
|
lorem: Lorem,
|
|
}
|
|
|
|
#[derive(FromDeriveInput, PartialEq, Debug)]
|
|
#[darling(attributes(darling_demo))]
|
|
struct TraitCore {
|
|
ident: syn::Ident,
|
|
generics: syn::Generics,
|
|
lorem: Lorem,
|
|
}
|
|
|
|
#[test]
|
|
fn simple() {
|
|
let di = parse_quote! {
|
|
#[derive(Foo)]
|
|
#[darling_demo(lorem(ipsum))]
|
|
pub struct Bar;
|
|
};
|
|
|
|
assert_eq!(
|
|
Core::from_derive_input(&di).unwrap(),
|
|
Core {
|
|
ident: parse_quote!(Bar),
|
|
vis: parse_quote!(pub),
|
|
generics: Default::default(),
|
|
lorem: Lorem {
|
|
ipsum: true,
|
|
dolor: None,
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn trait_type() {
|
|
let di = parse_quote! {
|
|
#[derive(Foo)]
|
|
#[darling_demo(lorem(dolor = "hello"))]
|
|
pub struct Bar;
|
|
};
|
|
|
|
assert_eq!(
|
|
TraitCore::from_derive_input(&di).unwrap(),
|
|
TraitCore {
|
|
ident: parse_quote!(Bar),
|
|
generics: Default::default(),
|
|
lorem: Lorem {
|
|
ipsum: false,
|
|
dolor: Some("hello".to_owned()),
|
|
}
|
|
}
|
|
);
|
|
}
|