Typed JSON lenses, builders, and aggregate validation for MoonBit
moon add totto2727/lens@0.4.3moon add totto2727/lens@0.4.3///|
test {
let document = @json.parse("{\"user\":{\"name\":\"Ada\",\"age\":37}}")
let user = object("user")
let name_lens = user.string("name")
let age_lens = user.int("age")
inspect(name_lens.get(document), content="Ada")
inspect(age_lens.get(document), content="37")
}///|
test {
let builder = JsonBuilder::JsonBuilder()
let user = object("user")
user.string("name").set(builder, "Ada")
user.int("age").set(builder, 37)
@json.json_inspect(builder, content={ "user": { "name": "Ada", "age": 37 } })
}moon add totto2727/lens@0.4.3pub struct JsonBuilder {
// private fields
}impl ToJson for JsonBuildertest {
let builder = JsonBuilder::JsonBuilder()
object("user").string("name").set(builder, "Ada")
@json.json_inspect(builder, content={ "user": { "name": "Ada" } })
}pub struct Lens[T] {
// private fields
}fn[T] Lens::get_or_json_decode_error(self : Lens[T], document : Json, path : JsonPath) -> T raise JsonDecodeErrorpub struct ObjectLens {
// private fields
}impl LensTrait for ObjectLenspub struct PresenceLens[T] {
// private fields
}impl LensTrait for PresenceLens[T]fn[T] PresenceLens::get_or_json_decode_error(self : PresenceLens[T], document : Json, path : JsonPath) -> T? raise JsonDecodeErrorfn[T] PresenceLens::json_decode_error(self : PresenceLens[T], path : JsonPath, message : String) -> JsonDecodeErrorfn[T] PresenceLens::nullish(self : PresenceLens[T], encode_mode? : NullishEncodeMode) -> PresenceLens[T]fn[T] PresenceLens::set(self : PresenceLens[T], builder : JsonBuilder, value : T?) -> Unit raise JsonBuildErrortest {
let document = @json.parse("{\"user\":{\"name\":\"Ada\"}}")
inspect(object("user").string("name").get(document), content="Ada")
}test {
let document = @json.parse("{\"user\":{\"name\":\"Ada\"}}")
let name_lens = object("user").string("name")
match validate(document, [name_lens]) {
Valid => ()
Invalid(_) => fail("expected valid document")
}
}Install
Download zipTyped JSON lenses, builders, and aggregate validation for MoonBit