exporters/
├── prompt.mbt # schema_to_prompt / schema_to_prompt_named 公共 API
├── prompt_renderer.mbt # StringRenderer trait + NamedPromptRenderer 实现
├── json_schema.mbt # to_json_schema / to_json_schema_named / to_json_schema_skeleton 公共 API
├── json_schema_renderer.mbt # JsonSchemaRenderer trait + NamedJsonRenderer 实现
├── moonbit_struct.mbt # schema_to_moonbit_struct / _full 公共 API
├── schema_exporter.mbt # schema_to_moon_zod_code / _named / _inline 公共 API
└── pkg.generated.mbti # moon info 生成的接口描述(勿手动编辑)Schema ──► render_type(renderer, schema) ──► StringRenderer ──► String
└── render_json_type(renderer, schema) ──► JsonSchemaRenderer ──► Jsonpub(open) trait JsonSchemaRenderer {
fn render_string(Self, schema : Schema) -> Json
fn render_number(Self, schema : Schema) -> Json
fn render_boolean(Self, schema : Schema) -> Json
fn render_null(Self, schema : Schema) -> Json
fn render_object(Self, spec : Map[String, Schema], mode : ObjectMode, schema : Schema) -> Json
fn render_array(Self, elem : Schema, schema : Schema) -> Json
fn render_optional(Self, inner : Schema, schema : Schema) -> Json
fn render_default(Self, inner : Schema, default_val : Json, schema : Schema) -> Json
fn render_enum(Self, values : Array[String], schema : Schema) -> Json
fn render_union(Self, schemas : Array[Schema], schema : Schema) -> Json
fn render_intersection(Self, schemas : Array[Schema], schema : Schema) -> Json
fn render_transform(Self, inner : Schema, closure : TransformClosure, schema : Schema) -> Json
fn render_literal(Self, value : Json, schema : Schema) -> Json
fn render_any(Self, schema : Schema) -> Json
fn render_unknown(Self, schema : Schema) -> Json
fn render_tuple(Self, items : Array[Schema], schema : Schema) -> Json
fn render_preprocess(Self, inner : Schema, schema : Schema) -> Json
}pub(open) trait StringRenderer {
fn render_string(Self, schema : Schema, indent : Int) -> String
fn render_number(Self, schema : Schema, indent : Int) -> String
fn render_boolean(Self, schema : Schema, indent : Int) -> String
fn render_null(Self, schema : Schema, indent : Int) -> String
fn render_object(Self, spec : Map[String, Schema], mode : ObjectMode, schema : Schema, indent : Int) -> String
fn render_array(Self, elem : Schema, schema : Schema, indent : Int) -> String
fn render_optional(Self, inner : Schema, schema : Schema, indent : Int) -> String
fn render_default(Self, inner : Schema, default_val : Json, schema : Schema, indent : Int) -> String
fn render_enum(Self, values : Array[String], schema : Schema, indent : Int) -> String
fn render_union(Self, schemas : Array[Schema], schema : Schema, indent : Int) -> String
fn render_intersection(Self, schemas : Array[Schema], schema : Schema, indent : Int) -> String
fn render_transform(Self, inner : Schema, closure : TransformClosure, schema : Schema, indent : Int) -> String
fn render_literal(Self, value : Json, schema : Schema, indent : Int) -> String
fn render_any(Self, schema : Schema, indent : Int) -> String
fn render_unknown(Self, schema : Schema, indent : Int) -> String
fn render_tuple(Self, items : Array[Schema], schema : Schema, indent : Int) -> String
fn render_preprocess(Self, inner : Schema, schema : Schema, indent : Int) -> String
}impl JsonSchemaRenderer for NamedJsonRendererfn render_default(self : NamedJsonRenderer, inner : Schema, default_val : Json, schema : Schema) -> Jsonfn render_object(self : NamedJsonRenderer, spec : Map[String, Schema], mode : ObjectMode, schema : Schema) -> Jsonfn render_transform(self : NamedJsonRenderer, inner : Schema, _closure : TransformClosure, schema : Schema) -> Jsonfn NamedJsonRenderer::NamedJsonRenderer(named_names~ : Array[String], include_annotations? : Bool) -> NamedJsonRendererimpl StringRenderer for NamedPromptRendererfn render_array(self : NamedPromptRenderer, elem : Schema, _schema : Schema, indent : Int) -> Stringfn render_default(self : NamedPromptRenderer, inner : Schema, _default_val : Json, _schema : Schema, indent : Int) -> Stringfn render_enum(self : NamedPromptRenderer, values : Array[String], schema : Schema, _indent : Int) -> Stringfn render_intersection(self : NamedPromptRenderer, schemas : Array[Schema], schema : Schema, indent : Int) -> Stringfn render_literal(self : NamedPromptRenderer, value : Json, schema : Schema, _indent : Int) -> Stringfn render_object(self : NamedPromptRenderer, spec : Map[String, Schema], _mode : ObjectMode, schema : Schema, indent : Int) -> Stringfn render_optional(self : NamedPromptRenderer, inner : Schema, _schema : Schema, indent : Int) -> Stringfn render_preprocess(self : NamedPromptRenderer, inner : Schema, _schema : Schema, indent : Int) -> Stringfn render_transform(self : NamedPromptRenderer, inner : Schema, _closure : TransformClosure, _schema : Schema, indent : Int) -> Stringfn render_tuple(self : NamedPromptRenderer, items : Array[Schema], _schema : Schema, indent : Int) -> Stringfn render_union(self : NamedPromptRenderer, schemas : Array[Schema], schema : Schema, indent : Int) -> Stringfn[R : JsonSchemaRenderer] render_json_type_ref(renderer : R, schema : Schema, named_names : Array[String]) -> Jsonfn[R : StringRenderer] render_type_named(renderer : R, schema : Schema, indent : Int, named_schemas : Array[Schema]) -> Stringlet schema = @moon_zod.string().min(3).describe("username")
let code = schema_to_moon_zod_code(schema)
// "@moon_zod.string().min(3).describe(\"username\")"let named_list = schema_to_moon_zod_code_named(root_schema, None)
// Returns:
// "User: @moon_zod.object({ ... }).name(\"User\")\n
// Profile: @moon_zod.object({ ... }).name(\"Profile\")"A runtime JSON schema validation library for MoonBit, inspired by Zod and Pydantic
Dependencies