xavier-derive 0.1.7

Derive module of Xavier. Xavier is a lightweight and versatile XML parsing library designed to streamline the process of handling XML data with ease and efficiency.
Documentation
use proc_macro2::{Ident, TokenStream};
use quote::{quote, ToTokens};
use syn::LitStr;

pub struct FieldAttributeSetter {
    pub is_string: bool,
    pub name: Ident,
    pub attr_name: LitStr,
}

impl ToTokens for FieldAttributeSetter {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        let attr_name = &self.attr_name;
        let field = &self.name;
        if self.is_string {
            tokens.extend(quote! {
                if xa_attr_name == #attr_name {
                     #field = Some(xa_attr_value.clone());
                }
            })
        } else {
            tokens.extend(quote! {
                if xa_attr_name == #attr_name {
                    #field = Some(xa_attr_value.parse()?);
                }
            })
        }
    }
}