// 1. 定义 Schema
let schema = string_schema().min_length(1).max_length(100)
// 2. 准备数据(Json 字面量重载)
let data : Json = "张三"
// 3. 校验
let result = validate(schema, data)
if result.is_valid {
println("校验通过!")
} else {
for err in result.errors {
println("\(err.path): \(err.message)")
}
}
最小可复现示例
保存为 example.mbt,通过 moon run 运行:
fn main {
let s = string_schema().min_length(2).max_length(10)
let r1 = validate(s, "hello") // Json 重载
println("'hello' 校验通过: \(r1.is_valid)") // true
let r2 = validate(s, "x") // 太短
println("'x' 校验通过: \(r2.is_valid)") // false
}
使用示例
字符串校验
let name_schema = string_schema()
.min_length(1)
.max_length(100)
.pattern("^[A-Z]") // 大写字母开头
.format("email")
let v : Json = "Zhang@example.com"
let result = validate(name_schema, v)
数值校验
let score_schema = number_schema()
.minimum(0.0)
.exclusive_maximum(100.0)
.multiple_of(0.5)
let v : Json = 87.5
assert_true(validate(score_schema, v).is_valid)
枚举校验
let color_schema = string_schema()
.string_enum(["red", "green", "blue"])
let v1 : Json = "green"
assert_true(validate(color_schema, v1).is_valid)
let v2 : Json = "yellow"
assert_false(validate(color_schema, v2).is_valid)
类型不匹配检测
let string_s = string_schema()
let number_v : Json = 42.0
let result = validate(string_s, number_v)
// result.is_valid == false
// result.errors[0].keyword == "type"
ValidationResult API
let err = ValidationError::new("/user/name", "太短", "minLength")
let r = ValidationResult::fail(err)
r.is_valid // false
r.errors.length() // 1
r.errors[0].path // "/user/name"
r.errors[0].keyword // "minLength"
// 合并结果
let e1 = ValidationError::new("/a", "错误a", "test")
let e2 = ValidationError::new("/b", "错误b", "test")
let merged = ValidationResult::fail(e1).merge(ValidationResult::fail(e2))
// merged.errors.length() == 2
复现步骤
# 1. 创建新 MoonBit 项目
moon new myproject
cd myproject
# 2. 添加 MoonSchema 依赖
moon add cosgammmmma/moonschema
# 3. 在 main.mbt 中编写 Schema 校验代码
# 4. 运行
moon run cmd/main
# 或直接克隆测试:
git clone https://github.com/cosgammmmma/moonschema.git
cd moonschema
moon check # 0 errors
moon test # 12 passed, 0 failed
MoonSchema
English | 中文
MoonBit 生态的 Schema 验证与数据建模库 — 声明式类型定义、约束校验、JSON Schema 互操作。
项目目标
MoonSchema 为 MoonBit 生态提供一套完整的 Schema 验证工具链,帮助开发者:
适用场景:库作者、CLI 开发者、API 开发者,以及任何在 MoonBit 中处理结构化数据的开发者。
特性
email、uri、date-timestring_schema().min_length(1).max_length(100).format("email")ValidationResult含is_valid布尔值和 JSON Pointer 路径的错误列表安装
快速开始
最小可复现示例
保存为
example.mbt,通过moon run运行:使用示例
字符串校验
数值校验
枚举校验
类型不匹配检测
ValidationResult API
复现步骤
API 参考
Schema 构建器
string_schema()number_schema()integer_schema()boolean_schema()null_schema()any_schema()字符串约束
.min_length(n).max_length(n).pattern(p)^前缀、$后缀、包含).string_enum(vals).format(f)email、uri、date-time).required()数值约束
.minimum(n).maximum(n).exclusive_minimum(n).exclusive_maximum(n).multiple_of(n)校验函数
validate(schema, value)ValidationResultis_valid(schema, value)错误类型
ValidationErrorValidationResult项目结构
开发
许可证
Apache 2.0 — 详见 LICENSE