use indexmap::IndexMap;
use super::entry::MessageEntry;
#[derive(Debug, Clone)]
pub struct GettextFile {
pub entries: IndexMap<(String, Option<String>), MessageEntry>,
pub metadata: IndexMap<String, String>,
pub obsolete_lines: Vec<String>,
}
impl GettextFile {
pub fn new() -> Self {
Self {
entries: IndexMap::new(),
metadata: IndexMap::new(),
obsolete_lines: Vec::new(),
}
}
pub fn plural_forms(&self) -> Option<String> {
self.metadata.get("Plural-Forms").cloned()
}
pub fn language(&self) -> Option<String> {
self.metadata.get("Language").cloned()
}
pub fn rebuild_header_entry(&mut self) {
let mut header_str = String::new();
for (k, v) in self.metadata.iter() {
header_str.push_str(&format!("{}: {}\n", k, v));
}
let header_key = (String::new(), None);
if let Some(entry) = self.entries.get_mut(&header_key) {
entry.msgstr = header_str;
} else {
self.entries.insert(
header_key,
MessageEntry {
msgstr: header_str,
..Default::default()
},
);
}
}
}
impl Default for GettextFile {
fn default() -> Self {
Self::new()
}
}