def decimal_step
cli@0.2.0.0 · cli.bend:1959
import cli@0.2.0.0/cli.bend as Cli
import Base
1959def decimal_step(state: DecimalState, +c: Char) -> DecimalState:
1960 match state:
1961 case DecStart{}:
1962 Bool.pick(DecimalState, Char.is_eq(c, '-'), DecAfterMinus{},
1963 Bool.pick(DecimalState, Char.is_digit(c), DecInt{},
1964 Bool.pick(DecimalState, Char.is_eq(c, '.'), DecDotFirst{}, DecInvalid{})))
1965 case DecAfterMinus{}:
1966 Bool.pick(DecimalState, Char.is_digit(c), DecInt{},
1967 Bool.pick(DecimalState, Char.is_eq(c, '.'), DecDotFirst{}, DecInvalid{}))
1968 case DecInt{}:
1969 Bool.pick(DecimalState, Char.is_digit(c), DecInt{},
1970 Bool.pick(DecimalState, Char.is_eq(c, '.'), DecDotAfterInt{},
1971 Bool.pick(DecimalState, is_exponent(c), DecExpStart{}, DecInvalid{})))
1972 case DecDotFirst{}:
1973 Bool.pick(DecimalState, Char.is_digit(c), DecFrac{}, DecInvalid{})
1974 case DecDotAfterInt{}:
1975 Bool.pick(DecimalState, Char.is_digit(c), DecFrac{},
1976 Bool.pick(DecimalState, is_exponent(c), DecExpStart{}, DecInvalid{}))
1977 case DecFrac{}:
1978 Bool.pick(DecimalState, Char.is_digit(c), DecFrac{},
1979 Bool.pick(DecimalState, is_exponent(c), DecExpStart{}, DecInvalid{}))
1980 case DecExpStart{}:
1981 Bool.pick(DecimalState, is_sign(c), DecExpSign{},
1982 Bool.pick(DecimalState, Char.is_digit(c), DecExpDigits{}, DecInvalid{}))
1983 case DecExpSign{}:
1984 Bool.pick(DecimalState, Char.is_digit(c), DecExpDigits{}, DecInvalid{})
1985 case DecExpDigits{}:
1986 Bool.pick(DecimalState, Char.is_digit(c), DecExpDigits{}, DecInvalid{})
1987 case DecInvalid{}:
1988 DecInvalid{}