weblate-luau 0.1.0

Generates a Luau table for weblate translations that are represented in basic JSON
use crate::language::Language;
use std::collections::BTreeMap;
use std::fmt::{Display, Formatter};

/// A Luau Locale database.
#[derive(Debug, Default)]
pub struct LuauLocaleDb {
    db: BTreeMap<String, BTreeMap<String, String>>,
}

impl LuauLocaleDb {
    /// Inserts a string key into the database.
    pub fn insert_mapping(&mut self, lang: &Language, key: String, value: String) {
        self.db
            .entry(key)
            .or_default()
            .insert(lang.fb_code.to_string(), value);
    }
}

impl Display for LuauLocaleDb {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        writeln!(f, "--!strict")?;
        writeln!(
            f,
            "-- This file was generated by the weblate-luau tool. Do not edit by hand."
        )?;

        writeln!(f, "return {{")?;
        for (string_id, language_map) in &self.db {
            writeln!(f, "\t[\"{string_id}\"] = {{")?;
            for (language, value) in language_map {
                writeln!(f, "\t\t{language} = \"{value}\",")?;
            }
            writeln!(f, "\t}},")?;
        }
        writeln!(f, "}}")
    }
}