scroll.server/crates/titan-derive/src/lib.rs
WiseDev d25a6de423 move all crates into crates/, glob members
pure move, no code touched. readme and protocol.md paths fixed up.
2026-08-23 08:15:45 +03:00

30 lines
1,000 B
Rust

mod codec;
mod meta;
use proc_macro::TokenStream;
use syn::{parse_macro_input, DeriveInput};
#[proc_macro_derive(Payload, attributes(codec))]
pub fn derive_payload(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
codec::expand_payload(&input)
.unwrap_or_else(syn::Error::into_compile_error)
.into()
}
#[proc_macro_derive(Message, attributes(codec, message))]
pub fn derive_message(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let payload = match codec::expand_payload(&input) {
Ok(tokens) => tokens,
Err(error) => return error.into_compile_error().into(),
};
let meta = match meta::expand_meta(&input) {
Ok(tokens) => tokens,
Err(error) => return error.into_compile_error().into(),
};
let registration = meta::expand_registration(&input);
quote::quote! {
#payload
#meta
#registration
}
.into()
}