///|
async fn main {
run_cli() catch {
e => @cli.exit_error(e)
}
}
///|
async fn run_cli() -> Unit {
let args = @env.args()
if (args.length() != 6 && args.length() != 8 && args.length() != 10) ||
(args.length() == 8 && args[6] != "--verify" && args[6] != "--policy") ||
(args.length() == 10 && (args[6] != "--verify" || args[8] != "--policy")) {
raise @jieheng.Invalid(
code="arguments",
path="cli",
message="usage: moon run cmd/replay -- BEFORE.json AFTER.json CASES.json SCALE ROUNDING [--verify REPORT.json] [--policy POLICY.json]",
)
}
let before = @jieheng.decode_catalog(@cli.read_input(args[1]))
let after = @jieheng.decode_catalog(@cli.read_input(args[2]))
let cases = @jieheng.decode_replay_cases(@cli.read_input(args[3]))
let scale = @cli.scale(args[4])
let rounding = @cli.rounding(args[5])
let report = if args.length() >= 8 && args[6] == "--verify" {
@jieheng.decode_catalog_replay(@cli.read_input(args[7]))
} else {
@jieheng.replay_catalogs(before, after, cases[:], scale~, rounding~)
}
@jieheng.verify_catalog_replay(
before,
after,
cases[:],
report,
scale~,
rounding~,
)
if args.length() == 10 || (args.length() == 8 && args[6] == "--policy") {
let file = args[args.length() - 1]
let policy = @jieheng.decode_replay_policy(@cli.read_input(file))
@jieheng.check_replay_policy(
before,
after,
cases[:],
report,
policy,
scale~,
rounding~,
)
}
@stdio.stdout.write(@jieheng.encode_catalog_replay(report) + "\n")
}