1use proc_macro::TokenStream;
2use quote::quote;
3use syn::parse_macro_input;
4
5mod args;
6mod model;
7mod signature;
8mod util;
9
10#[allow(non_snake_case)]
11#[proc_macro_attribute]
12pub fn Signature(args: TokenStream, input: TokenStream) -> TokenStream {
13 let sig = parse_macro_input!(input as signature::Signature);
14 let args = parse_macro_input!(args as args::Args);
15 let sig = sig.with_instruction(args);
16 TokenStream::from(quote!(#sig))
17}
18
19#[allow(non_snake_case)]
20#[proc_macro_attribute]
21pub fn Model(args: TokenStream, input: TokenStream) -> TokenStream {
22 let model = parse_macro_input!(input as model::Model);
23 let args = parse_macro_input!(args as args::Args);
24 let model = model.with_args(args);
25 TokenStream::from(quote!(#model))
26}