gettext_mcp/model/
file.rs1use indexmap::IndexMap;
4
5use super::entry::MessageEntry;
6
7#[derive(Debug, Clone)]
10pub struct GettextFile {
11 pub entries: IndexMap<(String, Option<String>), MessageEntry>,
13 pub metadata: IndexMap<String, String>,
15 pub obsolete_lines: Vec<String>,
18}
19
20impl GettextFile {
21 pub fn new() -> Self {
23 Self {
24 entries: IndexMap::new(),
25 metadata: IndexMap::new(),
26 obsolete_lines: Vec::new(),
27 }
28 }
29
30 pub fn plural_forms(&self) -> Option<String> {
32 self.metadata.get("Plural-Forms").cloned()
33 }
34
35 pub fn language(&self) -> Option<String> {
37 self.metadata.get("Language").cloned()
38 }
39
40 pub fn rebuild_header_entry(&mut self) {
46 let mut header_str = String::new();
47 for (k, v) in self.metadata.iter() {
48 header_str.push_str(&format!("{}: {}\n", k, v));
49 }
50 let header_key = (String::new(), None);
51 if let Some(entry) = self.entries.get_mut(&header_key) {
52 entry.msgstr = header_str;
53 } else {
54 self.entries.insert(
55 header_key,
56 MessageEntry {
57 msgstr: header_str,
58 ..Default::default()
59 },
60 );
61 }
62 }
63}
64
65impl Default for GettextFile {
66 fn default() -> Self {
67 Self::new()
68 }
69}