use crate::presenter; use super::{UJMTError, read}; use clap::{Arg, Command, ArgMatches, ArgAction}; pub fn init() -> Command { Command::new("generate_json") .about("Generate a JSON file from a Drawio XML file") .arg( Arg::new("file") .help("Drawio XML file") .action(ArgAction::Set) ) .arg( Arg::new("out_dir") .short('o') .default_value(".") .help("output directory") .action(ArgAction::Set), ) } pub fn exec(args: &ArgMatches) -> Result<(), UJMTError> { info!("Execute Generate"); let file = args.get_one::<String>("file").unwrap(); let result = read(file).map_err(|error| UJMTError::FileInputError(error))?; let out_dir = args.get_one::<String>("out_dir").unwrap(); debug!("Use File: \"{}\"", file); debug!("Use Output Directory: \"{}\"", out_dir); if file.ends_with(".drawio") || file.ends_with(".xml") { generate_from_xml(result, file, out_dir) .map_err(|error| UJMTError::GenerationFailed(error))?; } Ok(()) } fn generate_from_xml(text: String, out_dir: &str, out_file: &str) -> Result<(), presenter::PresenterError> { presenter::to_json_from_xml(text, out_dir, out_file) }