1mod chip_derive;
2mod pcb_macro;
3
4use proc_macro::TokenStream;
5use syn::{parse_macro_input, DeriveInput};
6
7#[proc_macro_derive(Chip, attributes(pin))]
8pub fn derive_chip(input: TokenStream) -> TokenStream {
9 let ast = parse_macro_input!(input as DeriveInput);
10 match &ast.data {
11 syn::Data::Enum(_) | syn::Data::Union(_) => {
12 panic!("Chip derive is only supported for structs")
13 }
14
15 syn::Data::Struct(chip_struct) => {
16 return chip_derive::derive_chip_impl(&ast.ident, chip_struct).into();
17 }
18 }
19}
20
21#[proc_macro]
22pub fn pcb(input: TokenStream) -> TokenStream {
23 let input = parse_macro_input!(input as pcb_macro::PcbMacroInput);
24 let output: proc_macro2::TokenStream = input.into();
25 output.into()
26}