1mod cddl;
2mod parse;
3mod print;
4use proc_macro::TokenStream;
5use proc_macro2::TokenStream as TokenStream2;
6
7#[proc_macro_attribute]
8pub fn seedle(attrs: TokenStream, toks: TokenStream) -> TokenStream {
9 do_seedle(attrs, toks).map_or_else(
10 |e| TokenStream::from(e.to_compile_error()),
11 TokenStream::from,
12 )
13}
14
15fn do_seedle(attrs: TokenStream, toks: TokenStream) -> syn::Result<TokenStream2> {
16 let attrs: parse::Attributes = syn::parse(attrs)?;
17 let item: parse::Mod = syn::parse(toks)?;
18 crate::print::cddl::build(item, attrs).map(|toks| toks.into())
19}