localize_it 2.5.1

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

pub fn macro_expressions_from_files(
    arguments: &Arguments,
    names_provider: &NamesProvider,
) -> Result<TokenStream> {
    Ok(if cfg!(feature = "from_files") {
        let expressions_from_files_ident = names_provider.get_name(MACRO_EXPRESSIONS_FROM_FILES);
        let expressions_from_files_hashed_ident =
            names_provider.get_hashed_name(MACRO_EXPRESSIONS_FROM_FILES);
        let expressions_from_files_path = names_provider.get_path(MACRO_EXPRESSIONS_FROM_FILES);
        let localize_it_crate = names_provider.get_crate_name("localize_it")?;

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

        quote! {
            #[macro_export]
            macro_rules! #expressions_from_files_hashed_ident {
                (@type_or_default) => {
                    &'static str
                };

                (@type_or_default $r#type: ty) => {
                    $r#type
                };

                (
                    {
                        $($locale: ident => $path: path),+ $(,)?
                    } => [
                        $($value: ident $(: $r#type: ty)?),+ $(,)?
                    ]
                ) => {
                    #localize_it_crate::__expressions_from_files!(
                        locales = [$($locale),+],
                        locales_path = [$($path),+],
                        expressions = [$($value),+],
                        expressions_type = [$(#expressions_from_files_path!(@type_or_default $($r#type)?)),+],
                        #path_argument
                    );
                };
            }

            pub use #expressions_from_files_hashed_ident as #expressions_from_files_ident;
        }
    } else {
        TokenStream::new()
    })
}