///|
fn print_help() -> Unit {
println("MoonAqueousSpec - auditable aqueous speciation")
println("")
println("Commands:")
println(
" demo [name] solve carbonate (default), sulfate, hydrolysis or water",
)
println(" demo-json print the carbonate Problem JSON")
println(" fixture-json name print a named Problem JSON")
println(" solve-json solve a Problem JSON passed as one argument")
println(" inspect-json validate and inspect a Problem JSON argument")
println(" sensitivity-json solve a SensitivityRequest JSON argument")
println("")
println("All concentrations are mol/L. Mineral SI is diagnostic only.")
}
///|
#cfg(target="js")
fn cli_args() -> Array[String] {
let args = @env.args()
if args.length() < 2 {
[]
} else {
Array::makei(args.length() - 1, fn(i) { args[i + 1] })
}
}
///|
#cfg(not(target="js"))
fn cli_args() -> Array[String] {
@env.args()
}
///|
fn main {
let args = cli_args()
if args.length() < 2 {
print_help()
} else {
let command = args[1]
match command {
"demo" => {
let name = if args.length() >= 3 { args[2] } else { "carbonate" }
match @equilibrium.named_problem(name) {
Ok(problem) =>
println(
@equilibrium.solve_json(@equilibrium.problem_to_json(problem)),
)
Err(error) => {
let payload : Json = { "ok": false, "error": error.message() }
println(payload.stringify())
}
}
}
"demo-json" => println(@equilibrium.demo_json())
"fixture-json" =>
if args.length() >= 3 {
println(@equilibrium.fixture_json(args[2]))
} else {
print_help()
}
"inspect-json" =>
if args.length() >= 3 {
println(@equilibrium.inspect_json(args[2]))
} else {
print_help()
}
"sensitivity-json" =>
if args.length() >= 3 {
println(@equilibrium.sensitivity_json(args[2]))
} else {
print_help()
}
"solve-json" =>
if args.length() >= 3 {
println(@equilibrium.solve_json(args[2]))
} else {
print_help()
}
_ => print_help()
}
}
}