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(),
|
|
|
|
|
}
|
|
|
|
|
}
|