def tokens

qasim-bend-kit@0.1.0.2 · proof/JSON_AssemblyProof.bend:14

import qasim-bend-kit@0.1.0.2/proof/JSON_AssemblyProof.bend as JSONAssemblyProof
import Base
import qasim-bend-kit@0.1.0.2/libs/JSON.bend as J

14def tokens(value: J.Value, mode: Mode, tail: List<J.Token>) -> List<J.Token>:
15    match value:
16        case J.Arr{Nil{}}:
17            match mode:
18                case Whole{}: J.Delimiter{'['} <> J.Delimiter{']'} <> tail
19                case Members{}: J.Delimiter{']'} <> tail
20        case J.Arr{head <> rest}:
21            match mode:
22                case Whole{}: J.Delimiter{'['} <> tokens(head, Whole{}, tokens(J.Arr{rest}, Members{}, tail))
23                case Members{}: J.Delimiter{','} <> tokens(head, Whole{}, tokens(J.Arr{rest}, Members{}, tail))
24        case J.Obj{Nil{}}:
25            match mode:
26                case Whole{}: J.Delimiter{'{'} <> J.Delimiter{'}'} <> tail
27                case Members{}: J.Delimiter{'}'} <> tail
28        case J.Obj{(key, value) <> rest}:
29            match mode:
30                case Whole{}: J.Delimiter{'{'} <> J.Atom{Done{J.Str{key}}} <> J.Delimiter{':'} <> tokens(value, Whole{}, tokens(J.Obj{rest}, Members{}, tail))
31                case Members{}: J.Delimiter{','} <> J.Atom{Done{J.Str{key}}} <> J.Delimiter{':'} <> tokens(value, Whole{}, tokens(J.Obj{rest}, Members{}, tail))
32        case J.Null{}: J.Atom{J.decode_payload("null")} <> tail
33        case J.Bool{truth}:
34            match truth:
35                case True{}: J.Atom{J.decode_payload("true")} <> tail
36                case False{}: J.Atom{J.decode_payload("false")} <> tail
37        case J.Number{lexeme, certificate}: J.Atom{J.decode_payload(lexeme)} <> tail
38        case J.Str{text}: J.Atom{J.decode_payload("\"" ++ J.escape_string(text) ++ "\"")} <> tail

Uses (11)

Used by (7)