Files
unshell/unshell-macros/src/lib.rs
T

37 lines
1.1 KiB
Rust
Raw Normal View History

2026-04-25 14:41:00 -06:00
//! Proc macros for `unshell` application-layer leaf declarations.
2026-04-26 12:08:34 -06:00
mod leaf;
mod procedure;
mod procedures;
mod utils;
2026-04-25 14:41:00 -06:00
use proc_macro::TokenStream;
2026-04-26 12:08:34 -06:00
use syn::{DeriveInput, ItemImpl, parse_macro_input};
2026-04-25 14:41:00 -06:00
#[proc_macro_derive(Leaf, attributes(leaf))]
pub fn derive_leaf(input: TokenStream) -> TokenStream {
2026-04-26 12:08:34 -06:00
match leaf::expand_leaf(parse_macro_input!(input as DeriveInput)) {
2026-04-25 14:41:00 -06:00
Ok(tokens) => tokens.into(),
Err(error) => error.to_compile_error().into(),
}
}
2026-04-25 17:42:39 -06:00
#[proc_macro_derive(Procedure, attributes(procedure))]
pub fn derive_procedure(input: TokenStream) -> TokenStream {
2026-04-26 12:08:34 -06:00
match procedure::expand_procedure(parse_macro_input!(input as DeriveInput)) {
2026-04-25 17:42:39 -06:00
Ok(tokens) => tokens.into(),
Err(error) => error.to_compile_error().into(),
}
}
2026-04-25 15:35:08 -06:00
#[proc_macro_attribute]
pub fn procedures(attr: TokenStream, item: TokenStream) -> TokenStream {
2026-04-26 12:08:34 -06:00
match procedures::expand_procedures(
parse_macro_input!(attr as procedures::ProceduresAttributes),
2026-04-25 15:35:08 -06:00
parse_macro_input!(item as ItemImpl),
) {
Ok(tokens) => tokens.into(),
Err(error) => error.to_compile_error().into(),
}
}