61 lines
1.2 KiB
Rust
61 lines
1.2 KiB
Rust
// The use of fields in debug print commands does not count as "used",
|
|
// which causes the fields to trigger an unwanted dead code warning.
|
|
#![allow(dead_code)]
|
|
|
|
use darling::{ast, util, FromDeriveInput, FromField};
|
|
use syn::{Ident, Type};
|
|
|
|
#[derive(Debug, FromField)]
|
|
#[darling(attributes(lorem))]
|
|
pub struct LoremField {
|
|
ident: Option<Ident>,
|
|
ty: Type,
|
|
#[darling(default)]
|
|
skip: bool,
|
|
}
|
|
|
|
#[derive(Debug, FromDeriveInput)]
|
|
#[darling(attributes(lorem), supports(struct_named))]
|
|
pub struct Lorem {
|
|
ident: Ident,
|
|
data: ast::Data<util::Ignored, LoremField>,
|
|
}
|
|
|
|
fn main() {
|
|
let good_input = r#"#[derive(Lorem)]
|
|
pub struct Foo {
|
|
#[lorem(skip)]
|
|
bar: bool,
|
|
|
|
baz: i64,
|
|
}"#;
|
|
|
|
let bad_input = r#"#[derive(Lorem)]
|
|
pub struct BadFoo(String, u32);"#;
|
|
|
|
let parsed = syn::parse_str(good_input).unwrap();
|
|
let receiver = Lorem::from_derive_input(&parsed).unwrap();
|
|
let wrong_shape_parsed = syn::parse_str(bad_input).unwrap();
|
|
let wrong_shape = Lorem::from_derive_input(&wrong_shape_parsed).expect_err("Shape was wrong");
|
|
|
|
println!(
|
|
r#"
|
|
INPUT:
|
|
|
|
{}
|
|
|
|
PARSED AS:
|
|
|
|
{:?}
|
|
|
|
BAD INPUT:
|
|
|
|
{}
|
|
|
|
PRODUCED ERROR:
|
|
|
|
{}
|
|
"#,
|
|
good_input, receiver, bad_input, wrong_shape
|
|
);
|
|
}
|