def deref
ezmcp@0.1.0.0 · src/openapi.bend:360
import ezmcp@0.1.0.0/src/openapi.bend as Openapi
import Base
import emerging-ezjson@1.2.0.0/src/value.bend as Value
360
361
362
363
364
365def deref(
366 fuel: Nat,
367 val: Value.Json,
368 +doc: Value.Json,
369 +refs: List<&2, String>
370) -> Value.Json:
371 match fuel:
372 case 0n:
373 val
374 case 1n+(+less):
375 match val:
376 case Value.JObj{+pairs}:
377 deref.obj(ref.of(pairs), doc, refs,
378 _u => Value.JObj{deref(1n+less, pairs, doc, refs)},
379 ref => target => deref(less, target, doc, ref <> refs))
380 case Value.JArr{items}:
381 Value.JArr{deref(1n+less, items, doc, refs)}
382 case Value.JCons{head, tail}:
383 Value.JCons{deref(1n+less, head, doc, refs),
384 deref(1n+less, tail, doc, refs)}
385 case Value.JPair{key, item, rest}:
386 Value.JPair{key, deref(1n+less, item, doc, refs),
387 deref(1n+less, rest, doc, refs)}
388 case Value.JBind{src, n, item, rest}:
389 Value.JBind{src, n, deref(1n+less, item, doc, refs),
390 deref(1n+less, rest, doc, refs)}
391 case other:
392 other