def dec

bend-schema-lib@0.4.1.0 · core.bend:1603

import bend-schema-lib@0.4.1.0/core.bend as Core
import Base

1603def dec(s: Schema, r: Raw) -> Maybe<&2, Meaning(s)>:
1604  match s r:
1605    case SNat{} RNum{n}:
1606      Some{n}
1607    case SNatIn{lo_, hi_} RNum{n}:
1608      Some{n}
1609    case SStr{} RStr{x}:
1610      Some{x}
1611    case SStrLen{lo_, hi_, s2} x:
1612      dec(s2, x)
1613    case SListLen{lo_, hi_, s2} x:
1614      dec(s2, x)
1615    case SOpt{+i} +x:
1616      pick_m(Maybe<&2, Maybe<&2, Meaning(i)>>, nullish(x), Some{None{}}, opt_some(Meaning(i), dec(i, x)))
1617    case SOptional{+i} +x:
1618      pick_m(Maybe<&2, Maybe<&2, Meaning(i)>>, is_missing(x), Some{None{}}, opt_some(Meaning(i), dec(i, x)))
1619    case SList{e} RNil{}:
1620      Some{Nil{}}
1621    case SList{+e} RCons{h, t}:
1622      lcons(Meaning(e), dec(e, h), dec(SList{e}, t))
1623    case SField{+n, +fs, +rest} +x:
1624      both(Meaning(fs), Meaning(rest), dec(fs, lookup(n, x)), dec(rest, x))
1625    case SEnd{} x:
1626      Some{Unit{}}
1627    case SRule{s2, tag} x:
1628      dec(s2, x)
1629    case SStrict{s2} x:
1630      dec(s2, x)
1631    case STagged{+k, +n, +cs, +rest} +x:
1632      pick_m(Maybe<&2, Either<&2, &2, Meaning(cs), Meaning(rest)>>, is_tag(k, n, x), map_inl(Meaning(cs), Meaning(rest), dec(cs, drop_key(k, x))), map_inr(Meaning(cs), Meaning(rest), dec(rest, x)))
1633    case STrue{} RBool{b}:
1634      true_unit(b)
1635    case SBool{} RBool{b}:
1636      Some{b}
1637    case SEnum{names} RStr{x}:
1638      Some{x}
1639    case SVariant{+n, +vs, +rest} +x:
1640      pick_m(Maybe<&2, Either<&2, &2, Meaning(vs), Meaning(rest)>>, is_missing(lookup(n, x)), map_inr(Meaning(vs), Meaning(rest), dec(rest, x)), map_inl(Meaning(vs), Meaning(rest), dec(vs, lookup(n, x))))
1641    case STuple{+ts, +rest} RCons{h, t}:
1642      both(Meaning(ts), Meaning(rest), dec(ts, h), dec(rest, t))
1643    case STEnd{} RNil{}:
1644      Some{Unit{}}
1645    case SJson{} RJson{value}:
1646      Some{value}
1647    case SInt{} RNum{n}:
1648      Some{IPos{n}}
1649    case SInt{} RNeg{n}:
1650      Some{INeg{n}}
1651    case SIntIn{lo_, hi_} RNum{n}:
1652      Some{IPos{n}}
1653    case SIntIn{lo_, hi_} RNeg{n}:
1654      Some{INeg{n}}
1655    case SEither{+l, +r} +x:
1656      pick_m(Maybe<&2, Either<&2, &2, Meaning(l), Meaning(r)>>, has_kind(l, kind_of(x)), map_inl(Meaning(l), Meaning(r), dec(l, x)), pick_m(Maybe<&2, Either<&2, &2, Meaning(l), Meaning(r)>>, has_kind(r, kind_of(x)), map_inr(Meaning(l), Meaning(r), dec(r, x)), None{}))
1657    case _ _:
1658      None{}

Uses (22)

Used by (0)

No other definition uses this definition.