pcb_rs_macros/
lib.rs

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}