def unique.step

bend-kit-camber@0.15.0.1 · input.bend:247

import bend-kit-camber@0.15.0.1/input.bend as Input
import Base
import bend-kit-json@0.7.0.0/json.bend as Json
import bend-kit-bytes@0.3.3.0/bytes.bend as Bytes

247def unique.step(step: Walk) -> Maybe<&1, Walk>:
248  match step:
249    case Value{value, parents}:
250      match value:
251        case Json.Obj{fields}: Some{Fields{fields, Nil{}, Set.new(), parents}}
252        case Json.Arr{values}: Some{Items{values, Nil{}, parents}}
253        case Json.Null{}: Some{Returned{Json.Null{}, parents}}
254        case Json.Flag{on}: Some{Returned{Json.Flag{on}, parents}}
255        case Json.Num{number}: Some{Returned{Json.Num{number}, parents}}
256        case Json.Str{text}: Some{Returned{Json.Str{text}, parents}}
257    case Fields{fields, acc, seen, parents}:
258      match fields:
259        case Nil{}: Some{Returned{Json.Obj{List.reverse(&1, Bytes.Bytes & Json.Val, acc)}, parents}}
260        case (key, value) <> rest:
261          unique.borrowed(utf8.borrow(key), value, rest, acc, seen, parents)
262    case Items{values, acc, parents}:
263      match values:
264        case Nil{}: Some{Returned{Json.Arr{List.reverse(&1, Json.Val, acc)}, parents}}
265        case value <> rest: Some{Value{value, Array{rest, acc} <> parents}}
266    case Returned{value, parents}:
267      match parents:
268        case Nil{}: Some{Returned{value, Nil{}}}
269        case Object{key, rest, acc, seen} <> parents: Some{Fields{rest, (key, value) <> acc, seen, parents}}
270        case Array{rest, acc} <> parents: Some{Items{rest, value <> acc, parents}}

Uses (12)

Used by (1)