local_fmt_macros_internal/def_local_fmt/
mod.rs1#![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}