~/bend-docscommunity

lib.bend checks

raw source on the hub · import 0x58fe986421eb4ce77da94e55266bfe22/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

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