///|
fn invalid(message : String) -> Unit {
println("Cannot compare batch reports: \{message}")
@sys.exit(2)
}
///|
fn read_batch(path : String) -> Result[@lens.BatchReport, String] {
let source = @utf8.decode(@fs.read_file_to_bytes(path)) catch {
e => return Err("Cannot read UTF-8 report \{path}: \{Repr(e)}")
}
@lens.BatchReport::parse_json(source)
}
///|
fn main {
let args = @env.args()[argument_prefix():].to_owned()
if args.length() < 2 ||
args.length() > 3 ||
(args.length() == 3 && args[2] != "--json") {
invalid(
"usage: migration-lens-compare-batch [--json]",
)
return
}
let baseline = match read_batch(args[0]) {
Ok(b) => b
Err(e) => {
invalid("Baseline: " + e)
return
}
}
let current = match read_batch(args[1]) {
Ok(b) => b
Err(e) => {
invalid("Current: " + e)
return
}
}
let delta = match @lens.compare_batches(baseline, current) {
Ok(d) => d
Err(e) => {
invalid(e)
return
}
}
if args.length() == 3 {
println(delta.to_json().stringify())
} else {
println(delta.to_text())
}
@sys.exit(delta.exit_code())
}
///|
#cfg(target="js")
fn argument_prefix() -> Int32 {
2
}
///|
#cfg(target="wasm")
fn argument_prefix() -> Int32 {
1
}
///|
#cfg(target="wasm-gc")
fn argument_prefix() -> Int32 {
1
}
///|
#cfg(target="native")
fn argument_prefix() -> Int32 {
1
}