JSON Schema validator and code generator for MoonBit
pub trait Validatable {
fn validate(Self, Json, resolver~ : Resolver, json_path~ : JsonPointer, schema_path~ : JsonPointer) -> Array[ValidationError]
}pub suberror ParseError {
JsonDecodeError(JsonDecodeError)
PointerParseError(String)
InvalidSchema(String)
}pub struct ArraySchema {
items : JsonSchema?
prefix_items : Array[JsonSchema]?
contains : JsonSchema?
min_contains : Int?
max_contains : Int?
min_items : Int?
max_items : Int?
} derive(Eq, Debug, FromJson)let b = @jsonschema.Builder::new()
let schema = b.object(
properties={
name: b.string(),
age: b.number(),
},
required=["name", "age"],
)
let _result = schema.validate({ "name": "Alice", "age": 30.0 }).unwrap()fn Builder::array(_self : Builder, items? : JsonSchema, prefix_items? : Array[JsonSchema], contains? : JsonSchema, min_contains? : Int, max_contains? : Int, min_items? : Int, max_items? : Int) -> JsonSchemafn Builder::enumerable_one_of(self : Builder, tag : String, schemas : Array[JsonSchema], params~ : JsonSchema?) -> JsonSchemafn Builder::integer(_self : Builder, minimum? : Int, maximum? : Int, exclusive_minimum? : Int, exclusive_maximum? : Int) -> JsonSchemafn Builder::number(_self : Builder, minimum? : Double, maximum? : Double, exclusive_minimum? : Double, exclusive_maximum? : Double) -> JsonSchemafn Builder::object(_self : Builder, properties? : Map[String, JsonSchema], required? : Array[String], additional_properties? : JsonSchema, required_all? : Bool) -> JsonSchemafn Builder::string(_self : Builder, minLength? : Int, maxLength? : Int, enum_? : Array[String]) -> JsonSchemapub(all) struct Enumerable {
tag : String
positionals : Array[JsonSchema]?
params : Map[String, JsonSchema]?
} derive(Eq, Debug)fn Enumerable::new(tag : String, positionals : Array[JsonSchema]?, params : Map[String, JsonSchema]?) -> Enumerablepub(all) enum JsonPointer {
Root
Key(JsonPointer, key~ : String)
Index(JsonPointer, index~ : Int)
} derive(Eq, Hash, ToJson, Debug, FromJson)impl Show for JsonPointerpub enum JsonSchema {
Any(AnySchema)
Null(NullSchema)
Boolean(BooleanSchema)
String(StringSchema)
Number(NumberSchema)
Integer(IntegerSchema)
Array(ArraySchema)
Object(ObjectSchema)
AnyOf(AnyOfSchema)
AllOf(AllOfSchema)
OneOf(OneOfSchema)
Ref(RefSchema)
Enum(EnumSchema)
Const(ConstSchema)
} derive(Eq, Debug)impl Validatable for JsonSchemafn validate(self : JsonSchema, value : Json, resolver~ : Resolver, json_path~ : JsonPointer, schema_path~ : JsonPointer) -> Array[ValidationError]impl FromJson for JsonSchemapub struct ObjectSchema {
properties : Map[String, JsonSchema]?
required : Array[String]?
additional_properties : JsonSchema?
} derive(Eq, Debug, FromJson)pub struct OneOfSchema {
schemas : Array[JsonSchema]
parsed_nullable : JsonSchema?
parsed_enumerable : Array[Enumerable]?
} derive(Eq, Debug)pub struct Resolver {
// private fields
}pub struct ValidationError {
input : Json
json_path : JsonPointer
schema_path : JsonPointer
message : String
children : Array[ValidationError]?
} derive(Eq, Debug)fn ValidationError::new(input : Json, json_path : JsonPointer, schema_path : JsonPointer, message : String, children? : Array[ValidationError]) -> ValidationErrortype Validatorlet jsonschema : Json = { "type": "string" }
let validator = build_validator(jsonschema)
let _result = validator.validate("hello")JSON Schema validator and code generator for MoonBit