rusmpp-macros 0.2.0

Procedural macros for Rusmpp-Core
Documentation
use proc_macro2::TokenStream;
use syn::{Data, DeriveInput};

use crate::{
    enums::{derive_rusmpp_for_enum, derive_tlv_value_for_enum},
    structs::derive_rusmpp_for_struct,
};

pub fn rusmpp(input: DeriveInput) -> syn::Result<TokenStream> {
    match &input.data {
        Data::Struct(data_struct) => match &data_struct.fields {
            syn::Fields::Named(fields_named) => derive_rusmpp_for_struct(&input, fields_named),
            _ => Err(syn::Error::new_spanned(
                &input.ident,
                "Rusmpp can only be derived for structs with named fields",
            )),
        },
        Data::Enum(_) => derive_rusmpp_for_enum(&input),
        _ => Err(syn::Error::new_spanned(
            &input.ident,
            "Rusmpp can only be derived for enums or structs with named fields",
        )),
    }
}

pub fn tlv_value(input: DeriveInput) -> syn::Result<TokenStream> {
    match &input.data {
        Data::Enum(data_enum) => derive_tlv_value_for_enum(&input, data_enum),
        _ => Err(syn::Error::new_spanned(
            &input.ident,
            "TlvValue can only be derived for enums",
        )),
    }
}