def enc

bend-toon-codec@0.1.0.0 · src/encode.bend:260

import bend-toon-codec@0.1.0.0/src/encode.bend as Encode
import Base
import bend-toon-codec@0.1.0.0/src/json.bend as J
import bend-toon-codec@0.1.0.0/src/text.bend as T
import bend-toon-codec@0.1.0.0/src/rep.bend as R

260# One def for values, object fields and list items. `elem` says the value is an
261# array element (no tabular form). `j` shrinks on every call.
262def enc(j: J.Json, +elem: Bool, +d: Delim) -> R.Rep:
263  match j:
264    case J.JArr{+items}:
265      arr.rep(elem, items, d, enc(items, True{}, d))
266    case J.JObj{fields}:
267      enc(fields, False{}, d)
268    case J.JNil{}:
269      R.RLines{Nil{}}
270    case J.JCons{h, t}:
271      R.RLines{R.cat(R.item(enc(h, True{}, d)), R.lines.of(enc(t, True{}, d)))}
272    case J.JField{k, v, t}:
273      R.RLines{R.cat(R.field(T.enc.key(k), enc(v, False{}, d)), R.lines.of(enc(t, False{}, d)))}
274    case _:
275      R.RPrim{prim.text(j, code(d))}

Uses (13)

Used by (1)