power_flow_data_derive/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3use syn::{parse_macro_input, DeriveInput};
4
5#[proc_macro_derive(RawRecord, attributes(rev30, rev33, line2, line3, line4, line5))]
6pub fn derive_raw_record(input: TokenStream) -> TokenStream {
7    let input = parse_macro_input!(input as DeriveInput);
8
9    let name = input.ident;
10
11    let expanded = match input.data {
12        syn::Data::Struct(_data) => {
13            quote! {
14                impl RawRecord for #name {
15                    fn parse_raw(input: &str) -> nom::IResult<&str, Self> {
16                        Ok((input, Self::default()))
17                    }
18                }
19            }
20        }
21        syn::Data::Enum(_) | syn::Data::Union(_) => {
22            panic!("#[derive(RawRecord)] must be applied to a struct")
23        }
24    };
25
26    TokenStream::from(expanded)
27}