derive/src/lib.rs
use darling::*;
use quote::quote;
use syn::*;
pub(crate) mod utils;
pub(crate) mod r#enum;
pub(crate) mod error;
pub(crate) mod r#struct;
#[proc_macro_attribute]
pub fn wfe(_: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input = parse_macro_input!(input as ItemMod);
match error::expand(input) {
Ok(ts) => ts.into(),
Err(e) => e.to_compile_error().into(),
}
}
#[proc_macro_derive(Wired, attributes(wf))]
pub fn derive_wired(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let parsed = match r#struct::WiredInput::from_derive_input(&input) {
Ok(p) => p,
Err(e) => return e.write_errors().into(),
};
match r#struct::expand(&parsed) {
Ok(ts) => ts.into(),
Err(e) => e.to_compile_error().into(),
}
}
#[proc_macro_derive(WiredEnum, attributes(wf))]
pub fn derive_wired_enum(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let parsed = match r#enum::WiredInput::from_derive_input(&input) {
Ok(p) => p,
Err(e) => return e.write_errors().into(),
};
match r#enum::expand(&parsed) {
Ok(ts) => ts.into(),
Err(e) => e.to_compile_error().into(),
}
}
#[proc_macro_derive(WiredBlank, attributes(wf))]
pub fn derive_wired_blank(_: proc_macro::TokenStream) -> proc_macro::TokenStream {
quote!().into()
}