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