embedded_interfaces_codegen/
lib.rs

1//! Packed struct and register definition macro library
2
3use proc_macro::TokenStream;
4use proc_macro2::TokenStream as TokenStream2;
5
6mod codegen;
7mod parser;
8
9use parser::InterfaceObjectsDefinition;
10
11#[proc_macro]
12pub fn interface_objects(input: TokenStream) -> TokenStream {
13    let input2 = TokenStream2::from(input);
14
15    match interface_objects_impl(input2) {
16        Ok(output) => output.into(),
17        Err(err) => err.to_compile_error().into(),
18    }
19}
20
21fn interface_objects_impl(input: TokenStream2) -> syn::Result<TokenStream2> {
22    let registers_def = syn::parse2::<InterfaceObjectsDefinition>(input)?;
23    let out = codegen::generate_interface_objects(&registers_def)?;
24
25    Ok(out)
26}