firmware_controller/
lib.rs1#![doc = include_str!("../README.md")]
2
3use proc_macro::TokenStream;
4use syn::{parse_macro_input, punctuated::Punctuated, ItemImpl, ItemStruct, Meta, Token};
5
6mod controller;
7mod util;
8
9#[proc_macro_attribute]
11pub fn controller(attr: TokenStream, item: TokenStream) -> TokenStream {
12 let _args = parse_macro_input!(attr with Punctuated<Meta, Token![,]>::parse_terminated);
13
14 if let Ok(input) = syn::parse::<ItemStruct>(item.clone()) {
15 controller::item_struct::expand(input)
16 .unwrap_or_else(|e| e.to_compile_error())
17 .into()
18 } else if let Ok(input) = syn::parse::<ItemImpl>(item) {
19 controller::item_impl::expand(input)
20 .unwrap_or_else(|e| e.to_compile_error())
21 .into()
22 } else {
23 panic!("Expected struct or trait")
24 }
25}