~/bend-docscommunity

src/json.bend source

src/json.bend on the hub · documented module

import Base# Numbers contain decimal tokens; native effects validate syntax and range.type Json is Data:  JsonNull{}  JsonBool{value: Bool}  JsonNumber{decimal: String}  JsonString{value: String}  JsonArray{items: List<&2, Json>}  JsonObject{entries: List<&2, Sigma<&2, &2, String, _ => Json>>}type ParseResult is Data:  JsonDone{value: Json}  JsonFailure{code: String, message: String}def Json.parse(text: String) -> IO(ParseResult):  import "./effects/json.c"def lookup_step(found: Bool, value: Json, rest: Unit -> Maybe<Json>) -> Maybe<Json>:  match found:    case True{}:      Some{value}    case False{}:      rest(Unit{})def lookup(+key: String, entries: List<&2, Sigma<&2, &2, String, _ => Json>>) -> Maybe<Json>:  match entries:    case Nil{}:      None{}    case Con{(name, value), tail}:      lookup_step(String.eq(key, name), value, u => lookup(key, tail))def field(key: String, value: Json) -> Maybe<Json>:  match value:    case JsonObject{entries}:      lookup(key, entries)    case other:      None{}def as_string(value: Json) -> Maybe<String>:  match value:    case JsonString{text}:      Some{text}    case other:      None{}# Builders preserve list order. Duplicate object keys are rejected on encoding.def object(entries: List<&2, Sigma<&2, &2, String, _ => Json>>) -> Json:  JsonObject{entries}def array(items: List<&2, Json>) -> Json:  JsonArray{items}def string(text: String) -> Json:  JsonString{text}def boolean(value: Bool) -> Json:  JsonBool{value}def null() -> Json:  JsonNull{}def u32(value: U32) -> Json:  JsonNumber{U32.show(value)}type EncodeResult is Data:  JsonEncoded{text: String}  JsonEncodeFailure{code: String, message: String}def Json.stringify_with_limit(value: Json, max_bytes: U32) -> IO(EncodeResult):  import "./effects/json.c"def Json.stringify(value: Json) -> IO(EncodeResult):  Json.stringify_with_limit(value, 16777216)