derive_base_message 0.1.0

A procedural macro for generating base message structures.
Documentation
use proc_macro2::TokenStream as TokenStream2;
use quote::quote;

pub fn implement_base_getters() -> TokenStream2 {
    quote! {
        pub fn is_example(&self) -> bool {
            self.base.example
        }

        pub fn additional_kwargs(&self) -> &std::collections::HashMap<String, String> {
            &self.base.additional_kwargs
        }

        pub fn response_metadata(&self) -> &std::collections::HashMap<String, String> {
            &self.base.response_metadata
        }

        pub fn id(&self) -> Option<&str> {
            self.base.id.as_deref()
        }

        pub fn name(&self) -> Option<&str> {
            self.base.name.as_deref()
        }
    }
}

#[cfg(test)]
mod tests {
    use quote::quote;

    use crate::methods::implement_base_getters;

    #[test]
    fn test_implement_base_methods() {
        let generated = implement_base_getters();

        let expected = quote! {
            pub fn is_example(&self) -> bool {
                self.base.example
            }

            pub fn additional_kwargs(&self) -> &std::collections::HashMap<String, String> {
                &self.base.additional_kwargs
            }

            pub fn response_metadata(&self) -> &std::collections::HashMap<String, String> {
                &self.base.response_metadata
            }

            pub fn id(&self) -> Option<&str> {
                self.base.id.as_deref()
            }

            pub fn name(&self) -> Option<&str> {
                self.base.name.as_deref()
            }
        };

        assert_eq!(generated.to_string(), expected.to_string());
    }
}