Skip to content
Snippets Groups Projects
Select Git revision
  • 22058fa289e0e11da1d50bdd40eff0fa55f9125f
  • master default
2 results

generate_json.rs

Blame
  • generate_json.rs 1.29 KiB
    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)
    }