local_fmt_macros_internal/def_local_fmt/
mod.rs

1#![allow(clippy::panic)]
2
3pub mod arg;
4pub mod internal;
5
6pub use arg::Args;
7use proc_macro2::TokenStream;
8
9pub fn generate(args: Args) -> syn::Result<TokenStream> {
10    let lang_messages = internal::generate(args.file_type, args.path, &args.message);
11    let internal_tokens = lang_messages
12        .iter()
13        .map(|lang_message| lang_message.to_token(&args.message))
14        .collect::<Vec<_>>();
15    let name = args.name;
16    let lang = args.lang;
17    let message = args.message.ty;
18    let supplier = args.supplier;
19    let token = quote::quote! {
20        pub const #name: local_fmt::LocalFmt<#lang, #message, {<#lang as enum_table::Enumable>::COUNT}> = {
21            use local_fmt::macros::check_static_message_arg;
22
23            let messages = enum_table::et!(#lang, #message, |lang| match lang {
24                #(
25                    #lang::#internal_tokens,
26                )*
27                #[allow(unreachable_patterns, clippy::panic)]
28                _ => panic!("Not filled all languages"),
29            });
30            local_fmt::LocalFmt::new(messages, #supplier)
31        };
32    };
33
34    Ok(token)
35}