#exporters

    Schema → String / Json / MoonBit source code 导出工具包。

    本包提供多条独立导出管线(Prompt / JSON Schema / MoonBit struct / MoonZod Schema)。每条管线对 @core.SchemaType 的 17 个变体做逐一渲染,支持内联展开和命名引用两种模式。


    #公开 API

    #Prompt 导出

    • schema_to_prompt(schema) -> String — 将 Schema 渲染为 TypeScript-interface 风格的提示文本(全内联)
    • schema_to_prompt_named(schema, include_names?) -> String — 提取带 name 的 Schema 生成模块化接口,带拓扑排序和类型引用

    #JSON Schema 导出

    • to_json_schema(schema) -> Json — 标准 JSON Schema(完整约束注释)
    • to_json_schema_skeleton(schema) -> Json — 轻量级骨架(仅类型结构,无约束)
    • to_json_schema_named(schema, include_names?) -> Json — 命名 Schema 导出为 $defs + $ref

    #MoonBit 结构导出

    • schema_to_moonbit_struct(schema) -> String — 生成 MoonBit pub struct / pub enum 定义
    • schema_to_moonbit_struct_full(schema) -> String — 生成定义 + 静态 Type::to_schema() 方法

    #代码生成

    • schema_to_moon_zod_code(schema) -> String — 将 Schema 反转为可 copy-paste 的 moon_zod 源码
    • schema_to_moon_zod_code_named(schema, include_names?) -> String — 带命名 Schema 引用的源码生成
    • schema_to_moon_zod_code_inline_with_refs(schema, include_names) -> String — 内联渲染,可选命名引用替换


    #文件结构

    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 生成的接口描述(勿手动编辑)


    #实现说明

    #渲染器架构

    导出管线统一采用 trait 分发 模式:

    1. 每个 SchemaType 变体对应 trait 中的一个方法
    2. 顶层的 render_type / render_json_type 做单点分发
    3. 渲染器只负责「类型 → 文本/Json」的转换,约束注释、命名引用、描述文本由各模块独立处理

    Schema ──► render_type(renderer, schema) ──► StringRenderer ──► String └── render_json_type(renderer, schema) ──► JsonSchemaRenderer ──► Json

    #Prompt 导出(prompt.mbt + prompt_renderer.mbt)

    • schema_to_prompt() 内部复用 NamedPromptRenderer([]),named 集合为空 → 全内联展开
    • schema_to_prompt_named() 收集所有带 name 的 Schema,拓扑排序后生成 export interface / export type 定义
    • include_names? 参数支持选择性导出(None = 全部,Some([]) = 无,Some([...]) = 指定)
    • named wrapper schemas(primitive、array、optional、default、transform、tuple、any、unknown、preprocess)统一生成 export type X = T
    • named intersection 当包含非 object 分支时输出 export type X = A & B,否则合并 object 字段

    #JSON Schema 导出(json_schema.mbt + json_schema_renderer.mbt)

    • NamedJsonRenderer 的 include_annotations 参数统一三种模式:
      • include_annotations=true → to_json_schema()(完整约束)
      • include_annotations=false → to_json_schema_skeleton()(仅结构)
    • optional/default/prefault 影响对象必填列表;只有 nullable/nullish 添加 null 分支
    • Strip 模式导出 additionalProperties: false(与运行时幻觉防御对齐)
    • object intersection 合并为单个 closed object;同名字段用属性级 allOf 保留各自约束
    • $defs 本体展开,子节点使用完整名称集合引用,包括合法的递归自引用

    #代码生成架构

    本包包含两条反向代码生成管线,均不采用 trait 分发,而是直接 match SchemaType 生成目标语言源码。

    #MoonBit 结构导出(moonbit_struct.mbt)

    • schema_to_moonbit_struct() 将 ObjectType 映射为 pub struct,EnumType 映射为 pub enum
    • schema_to_moonbit_struct_full() 额外生成静态 Type::to_schema() -> @moon_zod.Schema 方法,实现 struct ↔ Schema 往返
    • 基础类型映射:String → String,Number → Int64 / Double(按 .int() 规则区分),Boolean → Bool
    • ArrayType → Array[T];nullable 和可空 UnionType 递归映射为 @moon_zod.JsonNullable[T],字段缺失另加外层 ?
    • AnyType / UnknownType 当前回退为 Json
    • TupleType / 非可空 UnionType / IntersectionType 当前回退为 Json // TODO
    • 字段名和类型名自动转义(MoonBit 关键字、保留字、首字母数字)
    • 约束注释以行内注释形式附加在 struct field 上

    #MoonZod 代码导出(schema_exporter.mbt)

    • schema_to_moon_zod_code() 将运行时 Schema 反转为可 copy-paste 的 moon_zod 方法链源码
    • 输出格式:let name = @moon_zod.string().min(3).describe("...").name("name")
    • 根 Schema 无 name 时自动赋予 "Root"
    • schema_to_moon_zod_code_named() 提取所有命名 Schema,拓扑排序后输出 let name = ... 定义列表
    • 源码通过 Rule.constraint 和 TransformKind 还原规则、排他边界和内建转换
    • json_to_literal() 将 Json 值转为 MoonBit 构造函数调用(Json::string(...) / Json::number(...) / true / false / null)
    • 自定义 preprocess/transform/refine 无法序列化,checked API 返回 Err,旧入口明确 abort;不再生成恒等占位闭包
    • 源码保留 required_error、invalid_type_error、显式规则消息和品牌元数据;递归节点生成辅助函数


    #已知限制

    • 当前 moonbit_struct.mbt 中 TupleType 仍回退为 Json,any/unknown 仅做最低限度映射。待后续整体重构时重新评估。
    • MoonBit 结构导出尚不支持 tuple / intersection / union 等复杂类型的精确类型映射,当前回退为 Json。
    • 自定义 TransformType / PreprocessType 闭包无法忠实序列化;checked 源码导出返回 Err,旧源码导出入口会 abort。 详见 Core 迁移说明。使用 try_to_json_schema(view=InputView/OutputView) 区分结构阶段;生成源码的实际编译测试在 moon_zod_lab/scripts/check_generated_source.py,依赖和未发布源码的验证方式见 lab README。

    JsonNullable[T] 使用 JsonNull / JsonValue(T),提供 JSON 的 null | 值 编解码。普通 Option 在数组中的标准编码为 [值] | null,不能用于生成这里的 nullable 元素。生成类型的 FromJson 与 ToJson 往返已加入实际编译测试。 checked OutputView 的 intersection 通过 output_merge.mbt 递归合并结构;涉及 可缺失重叠值或无法表达的条件结构时返回 Err。独立校验器回归位于 moon_zod_lab/scripts/check_output_contracts.py(依赖 jsonschema 4.23.0,手动运行)。

    JsonSchemaRenderer

    pub(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
    fn render_lazy(Self, resolved :
    Schema
    , schema :
    Schema
    ) -> Json
    }

    Trait for rendering @core.Schema as a Json value (JSON @core.Schema export).

    Each method corresponds to one @core.SchemaType variant and returns a Json value representing the JSON @core.Schema constraint.

    StringRenderer

    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
    fn render_lazy(Self, resolved :
    Schema
    , schema :
    Schema
    , indent : Int) -> String
    }

    Trait for rendering @core.Schema as a String (used by prompt.mbt and moonbit_struct.mbt).

    Each method corresponds to one @core.SchemaType variant. The indent parameter controls nesting level for formatted output.

    JsonNullable

    pub(all) enum JsonNullable[T] {
    JsonNull
    JsonValue(T)
    } derive(Eq,
    Debug
    )

    JSON null or an inline value. Unlike Option outside struct fields, values are not encoded as singleton arrays. Used by generated nullable field/element types.
    impl ToJson for JsonNullable[T]

    JsonNullable::equal

    #deprecated("`JsonNullable::equal` is deprecated, use `Eq::equal` instead.")
    fn[T : Eq] JsonNullable::equal(JsonNullable[T], JsonNullable[T]) -> Bool

    JsonNullable::from_json

    #deprecated("`JsonNullable::from_json` is deprecated, use `@moonbitlang/core/json.FromJson::from_json` instead.")
    fn[T :
    FromJson
    ] JsonNullable::from_json(value : Json, path :
    JsonPath
    ) -> JsonNullable[T] raise
    JsonDecodeError

    JsonNullable::not_equal

    #deprecated("`JsonNullable::not_equal` is deprecated, use `Eq::not_equal` instead.")
    fn[T : Eq] JsonNullable::not_equal(x : JsonNullable[T], y : JsonNullable[T]) -> Bool

    JsonNullable::to_json

    fn[T : ToJson] JsonNullable::to_json(self : JsonNullable[T]) -> Json

    Serialize a nullable value using JSON's inline null-or-value representation.

    JsonNullable::to_repr

    #deprecated("`JsonNullable::to_repr` is deprecated, use `@moonbitlang/core/debug.Debug::to_repr` instead.")
    fn[T :
    Debug
    ] JsonNullable::to_repr(JsonNullable[T]) ->
    Repr

    NamedJsonRenderer

    pub struct NamedJsonRenderer {
    named_names : Array[String]
    include_annotations : Bool
    }

    NamedJsonRenderer::NamedJsonRenderer

    fn NamedJsonRenderer::NamedJsonRenderer(named_names~ : Array[String], include_annotations? : Bool) -> NamedJsonRenderer

    NamedJsonRenderer::render_any

    #deprecated("`NamedJsonRenderer::render_any` is deprecated, use `JsonSchemaRenderer::render_any` instead.")
    fn NamedJsonRenderer::render_any(self : NamedJsonRenderer, _schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_array

    #deprecated("`NamedJsonRenderer::render_array` is deprecated, use `JsonSchemaRenderer::render_array` instead.")
    fn NamedJsonRenderer::render_array(self : NamedJsonRenderer, elem :
    Schema
    , schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_boolean

    #deprecated("`NamedJsonRenderer::render_boolean` is deprecated, use `JsonSchemaRenderer::render_boolean` instead.")
    fn NamedJsonRenderer::render_boolean(self : NamedJsonRenderer, schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_default

    #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

    NamedJsonRenderer::render_enum

    #deprecated("`NamedJsonRenderer::render_enum` is deprecated, use `JsonSchemaRenderer::render_enum` instead.")
    fn NamedJsonRenderer::render_enum(self : NamedJsonRenderer, values : Array[String], schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_intersection

    #deprecated("`NamedJsonRenderer::render_intersection` is deprecated, use `JsonSchemaRenderer::render_intersection` instead.")
    fn NamedJsonRenderer::render_intersection(self : NamedJsonRenderer, schemas : Array[
    Schema
    ], schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_lazy

    #deprecated("`NamedJsonRenderer::render_lazy` is deprecated, use `JsonSchemaRenderer::render_lazy` instead.")
    fn NamedJsonRenderer::render_lazy(self : NamedJsonRenderer, resolved :
    Schema
    , schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_literal

    #deprecated("`NamedJsonRenderer::render_literal` is deprecated, use `JsonSchemaRenderer::render_literal` instead.")
    fn NamedJsonRenderer::render_literal(self : NamedJsonRenderer, value : Json, schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_null

    #deprecated("`NamedJsonRenderer::render_null` is deprecated, use `JsonSchemaRenderer::render_null` instead.")
    fn NamedJsonRenderer::render_null(self : NamedJsonRenderer, schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_number

    #deprecated("`NamedJsonRenderer::render_number` is deprecated, use `JsonSchemaRenderer::render_number` instead.")
    fn NamedJsonRenderer::render_number(self : NamedJsonRenderer, schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_object

    #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

    NamedJsonRenderer::render_optional

    #deprecated("`NamedJsonRenderer::render_optional` is deprecated, use `JsonSchemaRenderer::render_optional` instead.")
    fn NamedJsonRenderer::render_optional(self : NamedJsonRenderer, inner :
    Schema
    , schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_preprocess

    #deprecated("`NamedJsonRenderer::render_preprocess` is deprecated, use `JsonSchemaRenderer::render_preprocess` instead.")
    fn NamedJsonRenderer::render_preprocess(self : NamedJsonRenderer, inner :
    Schema
    , schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_string

    #deprecated("`NamedJsonRenderer::render_string` is deprecated, use `JsonSchemaRenderer::render_string` instead.")
    fn NamedJsonRenderer::render_string(self : NamedJsonRenderer, schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_transform

    #deprecated("`NamedJsonRenderer::render_transform` is deprecated, use `JsonSchemaRenderer::render_transform` instead.")
    fn NamedJsonRenderer::render_transform(self : NamedJsonRenderer, inner :
    Schema
    , closure :
    TransformClosure
    , schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_tuple

    #deprecated("`NamedJsonRenderer::render_tuple` is deprecated, use `JsonSchemaRenderer::render_tuple` instead.")
    fn NamedJsonRenderer::render_tuple(self : NamedJsonRenderer, items : Array[
    Schema
    ], _schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_union

    #deprecated("`NamedJsonRenderer::render_union` is deprecated, use `JsonSchemaRenderer::render_union` instead.")
    fn NamedJsonRenderer::render_union(self : NamedJsonRenderer, schemas : Array[
    Schema
    ], schema :
    Schema
    ) -> Json

    NamedJsonRenderer::render_unknown

    #deprecated("`NamedJsonRenderer::render_unknown` is deprecated, use `JsonSchemaRenderer::render_unknown` instead.")
    fn NamedJsonRenderer::render_unknown(self : NamedJsonRenderer, _schema :
    Schema
    ) -> Json

    NamedPromptRenderer

    pub struct NamedPromptRenderer {
    named_schemas : Array[
    Schema
    ]
    }

    Named prompt renderer: uses name references for named schemas.

    NamedPromptRenderer::NamedPromptRenderer

    NamedPromptRenderer::render_any

    #deprecated("`NamedPromptRenderer::render_any` is deprecated, use `StringRenderer::render_any` instead.")
    fn NamedPromptRenderer::render_any(self : NamedPromptRenderer, _schema :
    Schema
    , _indent : Int) -> String

    NamedPromptRenderer::render_array

    #deprecated("`NamedPromptRenderer::render_array` is deprecated, use `StringRenderer::render_array` instead.")
    fn NamedPromptRenderer::render_array(self : NamedPromptRenderer, elem :
    Schema
    , _schema :
    Schema
    , indent : Int) -> String

    NamedPromptRenderer::render_boolean

    #deprecated("`NamedPromptRenderer::render_boolean` is deprecated, use `StringRenderer::render_boolean` instead.")
    fn NamedPromptRenderer::render_boolean(self : NamedPromptRenderer, schema :
    Schema
    , indent : Int) -> String

    NamedPromptRenderer::render_default

    #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

    NamedPromptRenderer::render_enum

    #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

    NamedPromptRenderer::render_intersection

    #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

    NamedPromptRenderer::render_lazy

    #deprecated("`NamedPromptRenderer::render_lazy` is deprecated, use `StringRenderer::render_lazy` instead.")
    fn NamedPromptRenderer::render_lazy(self : NamedPromptRenderer, resolved :
    Schema
    , schema :
    Schema
    , indent : Int) -> String

    NamedPromptRenderer::render_literal

    #deprecated("`NamedPromptRenderer::render_literal` is deprecated, use `StringRenderer::render_literal` instead.")
    fn NamedPromptRenderer::render_literal(self : NamedPromptRenderer, value : Json, schema :
    Schema
    , _indent : Int) -> String

    NamedPromptRenderer::render_null

    #deprecated("`NamedPromptRenderer::render_null` is deprecated, use `StringRenderer::render_null` instead.")
    fn NamedPromptRenderer::render_null(self : NamedPromptRenderer, schema :
    Schema
    , indent : Int) -> String

    NamedPromptRenderer::render_number

    #deprecated("`NamedPromptRenderer::render_number` is deprecated, use `StringRenderer::render_number` instead.")
    fn NamedPromptRenderer::render_number(self : NamedPromptRenderer, schema :
    Schema
    , indent : Int) -> String

    NamedPromptRenderer::render_object

    #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

    NamedPromptRenderer::render_optional

    #deprecated("`NamedPromptRenderer::render_optional` is deprecated, use `StringRenderer::render_optional` instead.")
    fn NamedPromptRenderer::render_optional(self : NamedPromptRenderer, inner :
    Schema
    , schema :
    Schema
    , indent : Int) -> String

    NamedPromptRenderer::render_preprocess

    #deprecated("`NamedPromptRenderer::render_preprocess` is deprecated, use `StringRenderer::render_preprocess` instead.")
    fn NamedPromptRenderer::render_preprocess(self : NamedPromptRenderer, inner :
    Schema
    , schema :
    Schema
    , indent : Int) -> String

    NamedPromptRenderer::render_string

    #deprecated("`NamedPromptRenderer::render_string` is deprecated, use `StringRenderer::render_string` instead.")
    fn NamedPromptRenderer::render_string(self : NamedPromptRenderer, schema :
    Schema
    , indent : Int) -> String

    NamedPromptRenderer::render_transform

    #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

    NamedPromptRenderer::render_tuple

    #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

    NamedPromptRenderer::render_union

    #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

    NamedPromptRenderer::render_unknown

    #deprecated("`NamedPromptRenderer::render_unknown` is deprecated, use `StringRenderer::render_unknown` instead.")
    fn NamedPromptRenderer::render_unknown(self : NamedPromptRenderer, _schema :
    Schema
    , _indent : Int) -> String

    SchemaView

    pub(all) enum SchemaView {
    InputView
    OutputView
    } derive(
    Debug
    )

    Select the structural input contract or the parsed output contract.

    SchemaView::to_repr

    #deprecated("`SchemaView::to_repr` is deprecated, use `@moonbitlang/core/debug.Debug::to_repr` instead.")
    fn SchemaView::to_repr(SchemaView) ->
    Repr

    render_json_type

    fn[R : JsonSchemaRenderer] render_json_type(renderer : R, schema :
    Schema
    ) -> Json

    Dispatch to the appropriate JsonSchemaRenderer method based on @core.SchemaType.

    render_json_type_ref

    fn[R : JsonSchemaRenderer] render_json_type_ref(renderer : R, schema :
    Schema
    , named_names : Array[String]) -> Json

    Named-aware version: emits a $ref if schema has a name in the list.

    render_type

    fn[R : StringRenderer] render_type(renderer : R, schema :
    Schema
    , indent : Int) -> String

    Dispatch to the appropriate StringRenderer method based on @core.SchemaType.

    render_type_named

    fn[R : StringRenderer] render_type_named(renderer : R, schema :
    Schema
    , indent : Int, named_schemas : Array[
    Schema
    ]) -> String

    Named-aware version: renders a name reference if the schema has a name present in the named schemas list, otherwise dispatches normally.

    schema_to_moon_zod_code

    fn schema_to_moon_zod_code(schema :
    Schema
    ) -> String

    Generate best-effort moon_zod source code from a @core.Schema @core.object (inline expansion).

    Example

    let schema = @moon_zod.string().min(3).describe("username")

    let code = schema_to_moon_zod_code(schema)
    // "@moon_zod.string().min(3).describe(\"username\")"
    If root schema has no name, it is assigned the name "Root".

    schema_to_moon_zod_code_inline_with_refs

    fn schema_to_moon_zod_code_inline_with_refs(schema :
    Schema
    , include_names : Array[String]?) -> String

    Generate best-effort inline code with optional named schema reference substitution.

    If include_names is None, renders all schemas inline. If include_names is Some(names), replaces references to named schemas with variable names.

    For use with schema_to_moon_zod_code_named() which produces separate definitions.

    schema_to_moon_zod_code_named

    fn schema_to_moon_zod_code_named(schema :
    Schema
    , include_names? : Array[String]?) -> String

    Generate best-effort separate named schema definitions and return as newline-separated list.

    Example

    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\")"
    If root schema has no name, it is assigned the name "Root".

    schema_to_moonbit_struct

    fn schema_to_moonbit_struct(schema :
    Schema
    ) -> String

    Convert a moon_zod schema into MoonBit type definitions.

    Every ObjectType in the schema tree is emitted as a standalone pub struct. Schema names are treated only as type-name hints; anonymous nested objects are named from their owner and field path.

    schema_to_moonbit_struct_full

    fn schema_to_moonbit_struct_full(schema :
    Schema
    ) -> String

    Convert a moon_zod schema into MoonBit type definitions plus static Type::to_schema() -> @moon_zod.Schema functions for each generated type.

    schema_to_prompt

    fn schema_to_prompt(schema :
    Schema
    ) -> String

    Public API: convert a schema to a TypeScript-interface-style prompt @core.string.

    schema_to_prompt_named

    fn schema_to_prompt_named(schema :
    Schema
    , include_names? : Array[String]?) -> String

    Public API: convert a schema with named sub-schemas into a prompt with separate interface definitions and name-based references.

    If include_names is None, exports all named schemas. If include_names is Some(names), exports only the specified schema names. If root schema has no name, it is assigned the name "Root".

    to_json_schema

    fn to_json_schema(schema :
    Schema
    ) -> Json

    Convert a moon_zod @core.Schema into a standard JSON @core.Schema @core.object with full constraint annotations (minLength, maximum, pattern, format, etc.).

    to_json_schema_named

    fn to_json_schema_named(schema :
    Schema
    , include_names? : Array[String]?) -> Json

    Export a JSON @core.Schema with named sub-schemas in a $defs section. If root schema has no name, it is assigned the name "Root".

    to_json_schema_skeleton

    fn to_json_schema_skeleton(schema :
    Schema
    ) -> Json

    Convert a moon_zod @core.Schema into a lightweight JSON @core.Schema skeleton. Only structural type information is exported.

    try_schema_to_moon_zod_code

    fn try_schema_to_moon_zod_code(schema :
    Schema
    ) -> Result[String, String]

    Generate faithful source or return an explicit unsupported-schema error.

    try_to_json_schema

    fn try_to_json_schema(schema :
    Schema
    , view? : SchemaView) -> Result[Json, String]

    Export an explicit structural view, returning unsupported projection errors. A projection describes a stage's JSON shape, not arbitrary callback behavior.

    Powered by MoonBit

    Site sourceReport issueModulesSkillsBuild queueStatistics

    © 2026 mooncakes.io