def dec
import bend-schema-lib@0.4.1.0/core.bend as Coreimport 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.