fn convert()

in amzn-smt-string-transformer/src/main.rs [53:114]


fn convert(args: Opt) {
    let use_global_map = args.use_global_map.unwrap(); // this arg is required for "convert" mode
    let mapping_type = args.mapping.unwrap(); // also required for "convert" mode
    let path = args.input_file;
    let file = fs::File::open(path.clone());
    let file = file.expect("Error reading input file");
    let reader = io::BufReader::new(file);
    let problem = transpiler::parse(reader).unwrap();

    let (mut output, mapping_obj) = transpiler::transform_ast(
        problem,
        use_global_map,
        match mapping_type.as_str() {
            "char-to-char" => true,
            "no-reconstruct" => false,
            _ => {
                println!("Expected mapping type \"char-to-char\" or \"no-reconstruct\", received: {:?}. Proceeding with default (no-reconstruct)", mapping_type);
                false
            }
        },
    );
    // reconstruct original query shape
    output = subformula_parser::reconstruct_orig_query_shape(output);

    let mut output_string = output
        .iter()
        .map(|o| o.to_string())
        .collect::<Vec<String>>()
        .join("\n");

    // if we failed to transform some vars, bail
    if !mapping_obj.failed_transformed_constraint_vars.is_empty() {
        output_string = "Encountered unsupported string function: BAILING OUT".to_string();
    }

    let (file_name, file_ext) = (path.file_stem().unwrap(), path.extension().unwrap());
    let file_name = path.parent().unwrap().join(file_name);

    std::fs::write(
        [
            file_name.to_str().unwrap(),
            "_transformed.",
            file_ext.to_str().unwrap(),
        ]
        .join(""),
        output_string,
    )
    .expect("Error in printing to file");
    mapping_obj
        .print_json_to_file(
            &({
                if use_global_map {
                    "global"
                } else {
                    file_name.to_str().unwrap()
                }
            }
            .to_owned()
                + "_mapping.json"),
        )
        .expect("Error printing to mapping file");
}