localize_it 2.5.1

Simple and fast library for localization
Documentation
use crate::{
    backends::init_locale::arguments::Arguments,
    utils::{names::MACRO_EXPRESSION, path_argument, NamesProvider},
};
use proc_macro2::TokenStream;
use quote::quote;
use syn::Result;

pub fn macro_expression(
    arguments: &Arguments,
    names_provider: &NamesProvider,
) -> Result<TokenStream> {
    let expression_ident = names_provider.get_name(MACRO_EXPRESSION);
    let expression_hashed_ident = names_provider.get_hashed_name(MACRO_EXPRESSION);
    let expression_path = names_provider.get_path(MACRO_EXPRESSION);
    let localize_it_crate = names_provider.get_crate_name("localize_it")?;

    let path_argument = path_argument(arguments.path.clone());

    Ok(quote! {
        #[macro_export]
        macro_rules! #expression_hashed_ident {
            (
                $name: ident => {
                    $(
                        $locale: ident: $value: expr
                    ),+ $(,)?
                }
            ) => {
                #expression_path!($name: &'static str => {$($locale: $value),+});
            };

            (
                $name: ident: $r#type: ty => {
                    $(
                        $locale: ident: $value: expr
                    ),+ $(,)?
                }
            ) => {
                #localize_it_crate::__expression!(
                    name = $name,
                    r#type = $r#type,
                    locales = [$($locale),+],
                    values = [$($value),+],
                    #path_argument
                );
            };
        }

        pub use #expression_hashed_ident as #expression_ident;
    })
}