lib.bend checks
raw source on the hub · import 0x59cd2884b6325289afe009cad736353a/lib.bend as Lib
Json v1 — leaf-only JSON AST + encode/decode for Bend. Publish entry for this package. Depends only on Base (no Parse hub import).
Number representation: U32 (unsigned 32-bit integers). No floats, signs, or exponents in v1.
AST constructors: JNull | JBool | JNum(U32) | JStr. Arrays/objects (nested encode/decode) are deferred to json-nested / v2.
Supported decode subset (leaves only): - null, true, false - numbers: one or more decimal digits → U32 (via U32.read) - strings: "..." with escapes \", \\, \/, \n, \t, \r (other \x fail) - optional JSON whitespace (space/tab/CR/LF) around a single leaf value Not in v1: arrays, objects, floats, negatives, unicode \uXXXX.
1 import
import Base
Types
type Json source · line 18 · raw
Data
JNullJson
JBool@b:Bool -> Json
JNum@n:U32 -> Json
JStr@s:String -> Json
Definitions
def Json.null source · line 26 · raw
Json
def Json.bool source · line 29 · raw
@b:Bool -> Json
def Json.num source · line 32 · raw
@n:U32 -> Json
def Json.str source · line 35 · raw
@s:String -> Json
def Json.encode.bool source · line 40 · raw
@b:Bool -> String
def Json.encode.esc.char source · line 49 · raw
@+c:Char -> String
Escape " and \ only when printing; other chars pass through (valid if already JSON-safe). Decode accepts a slightly richer escape set (see decode.str).
def Json.encode.esc.go source · line 55 · raw
@s:String -> String
def Json.encode.str source · line 62 · raw
@+s:String -> String
def Json.encode source · line 65 · raw
@j:Json -> String
def Json.show source · line 76 · raw
@j:Json -> String
def Json.skip_ws source · line 81 · raw
@s:String -> String
def Json.starts source · line 84 · raw
@+p:String -> @+s:String -> Bool
def Json.drop source · line 87 · raw
@+n:Nat -> @s:String -> String
def Json.take_digits.go source · line 91 · raw
@n:Nat -> @s:String -> @acc:String -> @step:Bool -> @+h:Char -> @ok:Bool -> Pair(String, String)
Span leading digits. Nat fuel + step flag (same shape as Parse.take_while).
def Json.take_digits source · line 108 · raw
@+s:String -> Pair(String, String)
def Json.decode.str.go source · line 116 · raw
@n:Nat -> @esc:Bool -> @s:String -> @+acc:String -> Maybe<&1, Pair(String, String)>
String body with escapes. Nat fuel (2 steps/char) + esc flag; +fuel clones Nat for Bool.pick arms (affine otherwise).
def Json.decode.str.after_quote source · line 149 · raw
@+s:String -> Maybe<&1, Pair(String, String)>
def Json.decode.lit source · line 154 · raw
@+rest:String -> @v:Json -> @+s:String -> Maybe<&1, Pair(Json, String)>
def Json.decode.string_val.cont source · line 162 · raw
@m:Maybe<&1, Pair(String, String)> -> Maybe<&1, Pair(Json, String)>
def Json.decode.string_val source · line 171 · raw
@s:String -> Maybe<&1, Pair(Json, String)>
def Json.decode.number.read source · line 174 · raw
@rest:String -> @m:Maybe<&2, U32> -> Maybe<&1, Pair(Json, String)>
def Json.decode.number.go source · line 183 · raw
@pair:Pair(String, String) -> Maybe<&1, Pair(Json, String)>
def Json.decode.number source · line 193 · raw
@s:String -> Maybe<&1, Pair(Json, String)>
def Json.decode.value source · line 197 · raw
@s:String -> Maybe<&1, Pair(Json, String)>
Leaf value only (no '[' / '{').
def Json.decode.finish.rest source · line 215 · raw
@v:Json -> @rest:String -> Maybe<&2, Json>
def Json.decode.finish.go source · line 222 · raw
@m:Maybe<&1, Pair(Json, String)> -> Maybe<&2, Json>
def Json.decode.finish source · line 229 · raw
@m:Maybe<&1, Pair(Json, String)> -> Maybe<&2, Json>
def Json.decode source · line 232 · raw
@s:String -> Maybe<&2, Json>
def Json.parse source · line 235 · raw
@s:String -> Maybe<&2, Json>
def Json.decode_prefix source · line 238 · raw
@s:String -> Maybe<&1, Pair(Json, String)>