///|
/// CLI that exports example schemas as JSON Schema.
///
/// The schema definitions are shared in examples/shared_schemas/.
///
/// Usage:
/// moon run examples/schema2json -- schema|validate [json]
///
/// Schemas: product, movie
fn main {
let args = @env.args()
if args.length() < 3 {
println(
"Usage: moon run examples/schema2json -- [schema|validate] [json]",
)
println("")
println("Schemas: product, movie")
println("")
println("Examples:")
println(
" Output JSON Schema: moon run examples/schema2json -- product schema",
)
println(
" Validate JSON: moon run examples/schema2json -- product validate ''",
)
return
}
let schema_name = args[1]
let command = args[2]
let schema = match @shared_schemas.get_schema(schema_name) {
Ok(s) => s
Err(msg) => {
println("ERR")
println("1")
println(msg)
return
}
}
match command {
"schema" => {
let schema_json = @moon_zod.to_json_schema(schema)
println(schema_json.stringify(indent=2))
}
"validate" => {
if args.length() < 4 {
println("ERR")
println("1")
println("[(root)] No JSON input provided")
return
}
let json_str = args[3]
let json = @json.parse(json_str) catch {
_ => {
println("ERR")
println("1")
println("[(root)] Invalid JSON (got: " + json_str + ")")
return
}
}
match schema.parse(json) {
Ok(clean) => {
println("OK")
println(@debug.to_string(clean))
}
Err(errors) => {
println("ERR")
println(errors.length().to_string())
for e in errors {
println(e.to_string())
}
}
}
}
_ => {
println("ERR")
println("1")
println("Unknown command: " + command + ". Use 'schema' or 'validate'.")
}
}
}