1use proc_macro::TokenStream;
4
5use syn::parse_macro_input;
6
7use crate::register::{_Register, _RegisterWithUses};
8use crate::uses::_Uses;
9
10mod field;
11mod field_type;
12mod parse;
13mod register;
14mod render;
15mod spanned;
16mod uses;
17
18#[proc_macro]
20pub fn register(item: TokenStream) -> TokenStream {
21 render::render_register_with_uses(parse_macro_input!(item as _RegisterWithUses))
22 .map(TokenStream::from)
23 .unwrap_or_else(|err| TokenStream::from(err.to_compile_error()))
24}
25
26#[proc_macro]
28pub fn register_uses(item: TokenStream) -> TokenStream {
29 TokenStream::from(render::render_uses(parse_macro_input!(item as _Uses)))
30}
31
32#[proc_macro]
34pub fn register_definition(item: TokenStream) -> TokenStream {
35 render::render_register(parse_macro_input!(item as _Register))
36 .map(TokenStream::from)
37 .unwrap_or_else(|err| TokenStream::from(err.to_compile_error()))
38}