1#![doc=include_str!( "../README.md")]
2#![deny(clippy::all)]
3
4use proc_macro::TokenStream;
5use proc_macro_error2::proc_macro_error;
6use syn::{DeriveInput, parse_macro_input};
7
8mod codegen;
9mod model;
10mod util;
11
12use codegen::CodeGenerator;
16use model::Model;
17
18const RUST_FMI_NAMESPACE: uuid::Uuid = uuid::uuid!("6ba7b810-9dad-11d1-80b4-00c04fd430c8");
20
21#[proc_macro_derive(FmuModel, attributes(model, variable, alias, child))]
43#[proc_macro_error]
44pub fn derive_fmu_model(input: TokenStream) -> TokenStream {
45 let input = parse_macro_input!(input as DeriveInput);
46 let model = Model::from(input);
47
48 proc_macro_error2::abort_if_dirty();
49
50 let code_generator = CodeGenerator::new(model);
51 quote::quote! {
52 #code_generator
53 }
54 .into()
55}