xcstringsdocx 0.1.4

Converts a .xcstrings file to .docx file for supported languages, used in macOS app: 'XCStrings Catalog Docx Converter'
Documentation
use clap::{Parser, Subcommand};
use std::process::exit;
use xcstringsdocx::{
    android_xml_writer, docx_metadata, docx_writer, xcstrings_docx_merger, xcstrings_metadata, extension_determiner
};

#[derive(Parser, Debug)]
#[command(author, version, about)]
struct Cli {
    #[command(subcommand)]
    command: ConfigContainer,
}

fn main() {
    env_logger::init();

    let cli = Cli::parse();

    macro_rules! handle_result {
        ($result: expr) => {{
            match serde_json::to_string(&$result.map_err(|e| e.to_string())) {
                Ok(ok) => println!("{ok}"),
                Err(e) => {
                    eprint!("This is bad: {:#?}", e);

                    exit(1)
                }
            }
        }};
    }

    match cli.command {
        ConfigContainer::XCStringsDocxMerger(c) => {
            handle_result!(xcstrings_docx_merger::convert::merge(c))
        }
        ConfigContainer::DocxFromXCStrings(c) => {
            handle_result!(docx_writer::convert::convert_from_path(c))
        }
        ConfigContainer::XCStringsMetadata(c) => {
            handle_result!(xcstrings_metadata::read::read(c))
        }
        ConfigContainer::DocxMetadata(c) => {
            handle_result!(docx_metadata::read::read(c))
        }
        ConfigContainer::AndroidXmlWriter(c) => {
            handle_result!(android_xml_writer::convert::write_xmls(c))
        }
        ConfigContainer::ExtensionDeterminer(c) => {
            handle_result!(extension_determiner::extension_determiner(c))
        }
    };
}

#[derive(Subcommand, Clone, Debug)]
enum ConfigContainer {
    DocxMetadata(docx_metadata::config::Config),
    XCStringsMetadata(xcstrings_metadata::config::Config),
    XCStringsDocxMerger(xcstrings_docx_merger::config::Config),
    DocxFromXCStrings(docx_writer::config::Config),
    AndroidXmlWriter(android_xml_writer::config::Config),
    ExtensionDeterminer(extension_determiner::Config),
}