Sign in

    jsonschema

    JSON Schema validator and code generator for MoonBit

    jsonschema
    validation
    codegen
    Download zip
    Author
    Version
    0.8.1
    License
    MIT
    Last updated
    last month
    Downloads
    5K

    #@mizchi/jsonschema

    $ moon add mizchi/jsonschema

    #Features

    • Parse raw json schema to build Validator
    • Schema Builder like a zod
    • Moonbit Code generation from json schema
      • mizchi/jsonschema/codegen

    #Supported

    #LICENSE

    MIT

    Validatable

    pub trait Validatable {
    fn validate(Self, Json, resolver~ : Resolver, json_path~ : JsonPointer, schema_path~ : JsonPointer) -> Array[ValidationError]
    }

    ParseError

    pub suberror ParseError {
    JsonDecodeError(
    JsonDecodeError
    )
    PointerParseError(String)
    InvalidSchema(String)
    }

    JsonSchema compilation errors

    AllOfSchema

    pub struct AllOfSchema {
    schemas : Array[JsonSchema]
    } derive(Eq,
    Debug
    )

    AnyOfSchema

    pub struct AnyOfSchema {
    schemas : Array[JsonSchema]
    } derive(Eq,
    Debug
    )

    ArraySchema

    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
    )

    Builder

    pub struct Builder {
    } derive(Eq,
    Debug
    )

    Schema builder like a zod schema Example usage:
    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()

    Builder::all_of

    fn Builder::all_of(_self : Builder, schemas : Array[JsonSchema]) -> JsonSchema

    { "allOf": [...] }

    Builder::any

    fn Builder::any(_self : Builder) -> JsonSchema

    { "type": "any" }

    Builder::any_of

    fn Builder::any_of(_self : Builder, schemas : Array[JsonSchema]) -> JsonSchema

    { "anyOf": [...] }

    Builder::array

    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) -> JsonSchema

    { "type": "array" }

    Builder::boolean

    fn Builder::boolean(_self : Builder) -> JsonSchema

    { "type": "boolean" }

    Builder::const_

    fn Builder::const_(_self : Builder, value : Json) -> JsonSchema

    { "const": value }

    Builder::enum_

    fn Builder::enum_(_self : Builder, values : Array[Json]) -> JsonSchema

    { "enum": [...] }

    Builder::enumerable_one_of

    fn Builder::enumerable_one_of(self : Builder, tag : String, schemas : Array[JsonSchema], params~ : JsonSchema?) -> JsonSchema

    { "oneOf": [...] }

    Builder::integer

    fn Builder::integer(_self : Builder, minimum? : Int, maximum? : Int, exclusive_minimum? : Int, exclusive_maximum? : Int) -> JsonSchema

    { "type": "integer" }

    Builder::new

    fn Builder::new() -> Builder

    Builder::null

    fn Builder::null(_self : Builder) -> JsonSchema

    { "type": "null" }

    Builder::number

    fn Builder::number(_self : Builder, minimum? : Double, maximum? : Double, exclusive_minimum? : Double, exclusive_maximum? : Double) -> JsonSchema

    { "type": "number" }

    Builder::object

    fn Builder::object(_self : Builder, properties? : Map[String, JsonSchema], required? : Array[String], additional_properties? : JsonSchema, required_all? : Bool) -> JsonSchema

    { "type": "object" }

    Builder::one_of

    fn Builder::one_of(_self : Builder, schemas : Array[JsonSchema]) -> JsonSchema

    { "oneOf": [...] }

    Builder::ref_

    fn Builder::ref_(_self : Builder, pointer : JsonPointer) -> JsonSchema

    Builder::ref_from_string

    fn Builder::ref_from_string(_self : Builder, pointer : String) -> JsonSchema

    { "$ref": ... }

    Builder::string

    fn Builder::string(_self : Builder, minLength? : Int, maxLength? : Int, enum_? : Array[String]) -> JsonSchema

    { "type": "string" }

    ConstSchema

    Enumerable

    pub(all) struct Enumerable {
    tag : String
    positionals : Array[JsonSchema]?
    params : Map[String, JsonSchema]?
    } derive(Eq,
    Debug
    )

    Enumerable::new

    fn Enumerable::new(tag : String, positionals : Array[JsonSchema]?, params : Map[String, JsonSchema]?) -> Enumerable

    Enumerable::parse_enumerable

    fn Enumerable::parse_enumerable(schema : OneOfSchema) -> Array[Enumerable]?

    JsonPointer

    pub(all) enum JsonPointer {
    Root
    Key(JsonPointer, key~ : String)
    Index(JsonPointer, index~ : Int)
    } derive(Eq, Hash, ToJson,
    Debug
    ,
    FromJson
    )

    @json.JsonPath-like API
    impl Show for JsonPointer

    JsonPointer::access

    fn JsonPointer::access(self : JsonPointer, json : Json) -> Json?

    JsonPointer::from_string

    fn JsonPointer::from_string(pointer : String) -> Result[JsonPointer, String]

    Parse JSON Pointer string into JsonPointer

    JsonPointer::index

    fn JsonPointer::index(self : JsonPointer, index : Int) -> JsonPointer

    JsonPointer::key

    fn JsonPointer::key(self : JsonPointer, key : String) -> JsonPointer

    JsonSchema

    pub 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
    )

    JsonSchema

    NumberSchema

    pub struct NumberSchema {
    minimum : Double?
    maximum : Double?
    exclusive_minimum : Double?
    exclusive_maximum : Double?
    } derive(Eq, ToJson,
    Debug
    ,
    FromJson
    )

    ObjectSchema

    pub struct ObjectSchema {
    properties : Map[String, JsonSchema]?
    required : Array[String]?
    additional_properties : JsonSchema?
    } derive(Eq,
    Debug
    ,
    FromJson
    )

    OneOfSchema

    pub struct OneOfSchema {
    schemas : Array[JsonSchema]
    parsed_nullable : JsonSchema?
    parsed_enumerable : Array[Enumerable]?
    } derive(Eq,
    Debug
    )

    OneOf schema

    OneOfSchema::parse_nullable

    fn OneOfSchema::parse_nullable(schema : OneOfSchema) -> JsonSchema?

    detect nullable enumerable by [ , {"type": "null"}]

    Resolver

    pub struct Resolver {
    // private fields
    }

    Resolver::get_refs

    fn Resolver::get_refs(self : Resolver) -> Array[JsonPointer]

    Resolver::has

    fn Resolver::has(self : Resolver, ref_expr : JsonPointer) -> Bool

    Resolver::new

    fn Resolver::new(root_json : Json) -> Resolver raise ParseError

    Resolver::resolve

    fn Resolver::resolve(self : Resolver, pointer : JsonPointer) -> JsonSchema?

    StringSchema

    pub struct StringSchema {
    min_length : Int?
    max_length : Int?
    enum_ : Array[String]?
    } derive(Eq, ToJson,
    Debug
    ,
    FromJson
    )

    ValidationError

    pub struct ValidationError {
    input : Json
    json_path : JsonPointer
    schema_path : JsonPointer
    message : String
    children : Array[ValidationError]?
    } derive(Eq,
    Debug
    )

    ValidationError::new

    fn ValidationError::new(input : Json, json_path : JsonPointer, schema_path : JsonPointer, message : String, children? : Array[ValidationError]) -> ValidationError

    Validator

    type Validator

    Validator::validate

    fn Validator::validate(self : Validator, input : Json) -> Result[Unit, Array[ValidationError]]

    build_resolver

    fn build_resolver(root_json : Json) -> Resolver raise ParseError

    build_validator

    fn build_validator(raw : Json) -> Validator raise

    Example:
    let jsonschema : Json = { "type": "string" } let validator = build_validator(jsonschema) let _result = validator.validate("hello")

    collect_refs

    fn collect_refs(json : Json) ->
    Set
    [String]

    get $ref references in json

    Powered by MoonBit

    Site sourceReport issuePackagesBuild queueSkillsStatistics

    © 2026 mooncakes.io