local_fmt_macros_internal/def_local_fmt/internal/
mod.rs

1use arg::{LangMessage, Message, MessageValue};
2
3use crate::utils::hierarchy::Hierarchy;
4
5use super::arg::{ArgFileType, ArgPath, MessageField};
6
7mod arg;
8pub mod file;
9
10pub fn generate(file_type: ArgFileType, path: ArgPath, message: &MessageField) -> Vec<LangMessage> {
11    let lang_messages = file::parse(file_type, path);
12
13    for lang_message in &lang_messages {
14        check_lang_message(
15            &lang_message.lang,
16            &lang_message.messages,
17            &mut Hierarchy::new(),
18            message,
19        );
20    }
21
22    lang_messages
23}
24
25fn check_lang_message(
26    lang: &str,
27    messages: &Vec<Message>,
28    hierarchy: &mut Hierarchy<String>,
29    field: &MessageField,
30) {
31    match &field.fields {
32        None => {
33            for message in messages {
34                if let MessageValue::Nested(_) = &message.value {
35                    panic!(
36                        "Expected a simple message, but got a nested message in language {}: {}",
37                        lang, message.key
38                    );
39                }
40            }
41        }
42        Some(fields) => {
43            for (ty, field) in fields {
44                let message = messages.iter().find(|m| *ty == m.key).unwrap_or_else(|| {
45                    panic!(
46                        "Expected a nest message with key {}, but got nothing in language {}",
47                        ty, lang
48                    )
49                });
50
51                match &message.value {
52                    MessageValue::Nested(nested) => {
53                        hierarchy.process(ty.to_string(), |hierarchy| {
54                            check_lang_message(lang, nested, hierarchy, field);
55                        });
56                    }
57                    _ => {
58                        panic!(
59                            "Expected a nested message, but got a simple message in language {}: {}",
60                            lang, message.key
61                        );
62                    }
63                }
64            }
65        }
66    }
67}