elvwf

8 commits
Updated 2026-06-13 11:19:44
derive/src
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()
}