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");
}