///|
fn main {
let args = @env.args()
let mut command = ""
if args.length() < 2 {
println("Usage: moon run examples/multiple_schemas -- [json|ts|moonbit]")
println("Default command is 'ts'")
command = "ts"
} else {
command = args[1]
}
match command {
"json" => show_json()
"ts" => show_ts()
"moonbit" => show_moonbit()
"moon_zod" => show_moon_zod()
_ => {
println("ERR")
println("1")
println("Unknown command: \{command}")
println("Usage: moon run examples/multiple_schemas -- [json|ts|moonbit]")
return
}
}
}
///|
/// to show 3 different ways to generate json schema
fn show_json() -> Unit {
let json_schema = show_json_schema()
let json_schema_named = show_json_schema_named()
let json_schema_named_selected = show_json_schema_named_selected()
println("JSON Schema:\n\{json_schema.stringify(indent=2)}\n")
println("\n======================\n")
println("JSON Schema with Names:\n\{json_schema_named.stringify(indent=2)}\n")
println("\n======================\n")
println(
"JSON Schema with Names (Selected):\n\{json_schema_named_selected.stringify(indent=2)}\n",
)
println("\n======================\n")
}
///|
/// to show 3 different ways to generate TypeScript interface
fn show_ts() -> Unit {
let ts_interface = show_ts_interface()
let ts_interface_named = show_ts_interface_named()
let ts_interface_named_selected = show_ts_interface_named_selected()
println("TypeScript Interface:\n\{ts_interface}\n")
println("\n======================\n")
println("TypeScript Interface with Names:\n\{ts_interface_named}\n")
println("\n======================\n")
println(
"TypeScript Interface with Names (Selected):\n\{ts_interface_named_selected}\n",
)
println("\n======================\n")
}
///|
/// to show MoonBit struct generation with and without schema functions
fn show_moonbit() -> Unit {
let moonbit_struct = show_moonbit_struct()
let moonbit_struct_full = show_moonbit_struct_full()
println("Moonbit Struct:\n\{moonbit_struct}\n")
println("\n======================\n")
println("Moonbit Struct Full:\n\{moonbit_struct_full}\n")
println("\n======================\n")
}
///|
/// to show MoonZod code generation with and without schema functions
fn show_moon_zod() -> Unit {
let moon_zod_code = show_moon_zod_code()
let moon_zod_code_named = show_moon_zod_code_named()
println("MoonZod Code:\n\{moon_zod_code}\n")
println("\n======================\n")
println("MoonZod Code Named:\n\{moon_zod_code_named}\n")
println("\n======================\n")
}
///|
fn show_ts_interface() -> String {
let order_schema = order_schema()
@moon_zod.schema_to_prompt(order_schema)
}
///|
fn show_ts_interface_named() -> String {
let order_schema = order_schema()
@moon_zod.schema_to_prompt_named(order_schema)
}
///|
fn show_ts_interface_named_selected() -> String {
let order_schema = order_schema()
@moon_zod.schema_to_prompt_named(
order_schema,
include_names=Some([
"Order", "OrderStatus", "User", "Product", "HomeAddress", "OfficeAddress",
]),
)
}
///|
fn show_json_schema() -> Json {
let order_schema = order_schema()
@moon_zod.to_json_schema(order_schema)
}
///|
fn show_json_schema_named() -> Json {
let order_schema = order_schema()
@moon_zod.to_json_schema_named(order_schema)
}
///|
fn show_json_schema_named_selected() -> Json {
let order_schema = order_schema()
@moon_zod.to_json_schema_named(
order_schema,
include_names=Some([
"Order", "OrderStatus", "User", "Product", "HomeAddress", "OfficeAddress",
]),
)
}
///|
fn show_moonbit_struct() -> String {
let order_schema = order_schema()
@moon_zod.schema_to_moonbit_struct(order_schema)
}
///|
fn show_moonbit_struct_full() -> String {
let order_schema = order_schema()
@moon_zod.schema_to_moonbit_struct_full(order_schema)
}
///|
fn show_moon_zod_code() -> String {
let order_schema = order_schema()
@moon_zod.schema_to_moon_zod_code(order_schema)
}
///|
fn show_moon_zod_code_named() -> String {
let order_schema = order_schema()
@moon_zod.schema_to_moon_zod_code_named(order_schema)
}