1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
// 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
);
}
|