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) -> NamedJsonRenderer#deprecated("`NamedJsonRenderer::render_any` is deprecated, use `JsonSchemaRenderer::render_any` instead.")
fn NamedJsonRenderer::render_any(self : NamedJsonRenderer, _schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_array` is deprecated, use `JsonSchemaRenderer::render_array` instead.")
fn NamedJsonRenderer::render_array(self : NamedJsonRenderer, elem : Schema, schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_boolean` is deprecated, use `JsonSchemaRenderer::render_boolean` instead.")
fn NamedJsonRenderer::render_boolean(self : NamedJsonRenderer, schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_default` is deprecated, use `JsonSchemaRenderer::render_default` instead.")
fn NamedJsonRenderer::render_default(self : NamedJsonRenderer, inner : Schema, default_val : Json, schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_enum` is deprecated, use `JsonSchemaRenderer::render_enum` instead.")
fn NamedJsonRenderer::render_enum(self : NamedJsonRenderer, values : Array[String], schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_intersection` is deprecated, use `JsonSchemaRenderer::render_intersection` instead.")
fn NamedJsonRenderer::render_intersection(self : NamedJsonRenderer, schemas : Array[Schema], schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_literal` is deprecated, use `JsonSchemaRenderer::render_literal` instead.")
fn NamedJsonRenderer::render_literal(self : NamedJsonRenderer, value : Json, schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_null` is deprecated, use `JsonSchemaRenderer::render_null` instead.")
fn NamedJsonRenderer::render_null(self : NamedJsonRenderer, schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_number` is deprecated, use `JsonSchemaRenderer::render_number` instead.")
fn NamedJsonRenderer::render_number(self : NamedJsonRenderer, schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_object` is deprecated, use `JsonSchemaRenderer::render_object` instead.")
fn NamedJsonRenderer::render_object(self : NamedJsonRenderer, spec : Map[String, Schema], mode : ObjectMode, schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_optional` is deprecated, use `JsonSchemaRenderer::render_optional` instead.")
fn NamedJsonRenderer::render_optional(self : NamedJsonRenderer, inner : Schema, schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_preprocess` is deprecated, use `JsonSchemaRenderer::render_preprocess` instead.")
fn NamedJsonRenderer::render_preprocess(self : NamedJsonRenderer, inner : Schema, _schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_string` is deprecated, use `JsonSchemaRenderer::render_string` instead.")
fn NamedJsonRenderer::render_string(self : NamedJsonRenderer, schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_transform` is deprecated, use `JsonSchemaRenderer::render_transform` instead.")
fn NamedJsonRenderer::render_transform(self : NamedJsonRenderer, inner : Schema, _closure : TransformClosure, schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_tuple` is deprecated, use `JsonSchemaRenderer::render_tuple` instead.")
fn NamedJsonRenderer::render_tuple(self : NamedJsonRenderer, items : Array[Schema], _schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_union` is deprecated, use `JsonSchemaRenderer::render_union` instead.")
fn NamedJsonRenderer::render_union(self : NamedJsonRenderer, schemas : Array[Schema], schema : Schema) -> Json#deprecated("`NamedJsonRenderer::render_unknown` is deprecated, use `JsonSchemaRenderer::render_unknown` instead.")
fn NamedJsonRenderer::render_unknown(self : NamedJsonRenderer, _schema : Schema) -> Jsonimpl 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) -> String#deprecated("`NamedPromptRenderer::render_any` is deprecated, use `StringRenderer::render_any` instead.")
fn NamedPromptRenderer::render_any(self : NamedPromptRenderer, _schema : Schema, _indent : Int) -> String#deprecated("`NamedPromptRenderer::render_array` is deprecated, use `StringRenderer::render_array` instead.")
fn NamedPromptRenderer::render_array(self : NamedPromptRenderer, elem : Schema, _schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_boolean` is deprecated, use `StringRenderer::render_boolean` instead.")
fn NamedPromptRenderer::render_boolean(self : NamedPromptRenderer, schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_default` is deprecated, use `StringRenderer::render_default` instead.")
fn NamedPromptRenderer::render_default(self : NamedPromptRenderer, inner : Schema, _default_val : Json, _schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_enum` is deprecated, use `StringRenderer::render_enum` instead.")
fn NamedPromptRenderer::render_enum(self : NamedPromptRenderer, values : Array[String], schema : Schema, _indent : Int) -> String#deprecated("`NamedPromptRenderer::render_intersection` is deprecated, use `StringRenderer::render_intersection` instead.")
fn NamedPromptRenderer::render_intersection(self : NamedPromptRenderer, schemas : Array[Schema], schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_literal` is deprecated, use `StringRenderer::render_literal` instead.")
fn NamedPromptRenderer::render_literal(self : NamedPromptRenderer, value : Json, schema : Schema, _indent : Int) -> String#deprecated("`NamedPromptRenderer::render_null` is deprecated, use `StringRenderer::render_null` instead.")
fn NamedPromptRenderer::render_null(self : NamedPromptRenderer, schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_number` is deprecated, use `StringRenderer::render_number` instead.")
fn NamedPromptRenderer::render_number(self : NamedPromptRenderer, schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_object` is deprecated, use `StringRenderer::render_object` instead.")
fn NamedPromptRenderer::render_object(self : NamedPromptRenderer, spec : Map[String, Schema], _mode : ObjectMode, schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_optional` is deprecated, use `StringRenderer::render_optional` instead.")
fn NamedPromptRenderer::render_optional(self : NamedPromptRenderer, inner : Schema, _schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_preprocess` is deprecated, use `StringRenderer::render_preprocess` instead.")
fn NamedPromptRenderer::render_preprocess(self : NamedPromptRenderer, inner : Schema, _schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_string` is deprecated, use `StringRenderer::render_string` instead.")
fn NamedPromptRenderer::render_string(self : NamedPromptRenderer, schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_transform` is deprecated, use `StringRenderer::render_transform` instead.")
fn NamedPromptRenderer::render_transform(self : NamedPromptRenderer, inner : Schema, _closure : TransformClosure, _schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_tuple` is deprecated, use `StringRenderer::render_tuple` instead.")
fn NamedPromptRenderer::render_tuple(self : NamedPromptRenderer, items : Array[Schema], _schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_union` is deprecated, use `StringRenderer::render_union` instead.")
fn NamedPromptRenderer::render_union(self : NamedPromptRenderer, schemas : Array[Schema], schema : Schema, indent : Int) -> String#deprecated("`NamedPromptRenderer::render_unknown` is deprecated, use `StringRenderer::render_unknown` instead.")
fn NamedPromptRenderer::render_unknown(self : NamedPromptRenderer, _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\")"Install
Download zipA runtime JSON schema validation library for MoonBit, inspired by Zod and Pydantic