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}}