localize_it 2.5.1

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

pub fn macro_localize(arguments: &Arguments, names_provider: &NamesProvider) -> TokenStream {
    let localize_ident = names_provider.get_name(MACRO_LOCALIZE);
    let localize_hashed_ident = names_provider.get_hashed_name(MACRO_LOCALIZE);

    let locale_from_storage = if arguments.storage {
        let storage_path = names_provider.get_path(MOD_STORAGE);

        quote! {
            ($expression: path $(as ($($argument: expr),* $(,)?))?) => {
                $expression[#storage_path::get_as_usize()]$(($($argument),*))?
            };
        }
    } else {
        TokenStream::new()
    };

    quote! {
        #[macro_export]
        macro_rules! #localize_hashed_ident {
            #locale_from_storage

            ($expression: path $(as ($($argument: expr),* $(,)?))?, $locale: expr) => {
                $expression[$locale.to_usize()]$(($($argument),*))?
            };
        }

        pub use #localize_hashed_ident as #localize_ident;
    }
}