Packages
caffeine_lang
0.0.20
6.3.1
6.3.0
6.2.2
6.2.1
6.2.0
6.1.2
6.1.1
6.1.0
6.0.0
5.6.0
5.5.0
5.4.4
5.4.3
5.4.2
5.4.1
5.4.0
5.3.0
5.2.0
5.1.1
5.1.0
5.0.12
5.0.11
5.0.10
5.0.8
5.0.7
5.0.6
5.0.5
5.0.4
5.0.1
5.0.0
4.10.0
4.9.0
4.8.3
4.8.2
4.8.1
4.8.0
4.7.9
4.7.8
4.7.7
4.7.6
4.7.5
4.6.7
4.6.6
4.6.5
4.6.4
4.6.3
4.6.2
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.7
4.3.6
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.2
0.0.1
A compiler for generating reliability artifacts from service expectation definitions.
Current section
Files
Jump to
Current section
Files
src/caffeine_lang/cql/resolver.gleam
import caffeine_lang/cql/parser.{
type Exp, type ExpContainer, Add, Div, ExpContainer, OperatorExpr,
}
// For GoodOverTotal, the only valid top level operator is division.
pub type Primitives {
GoodOverTotal(numerator: Exp, denominator: Exp)
}
pub fn resolve_primitives(
exp_container: ExpContainer,
) -> Result(Primitives, String) {
case exp_container {
ExpContainer(exp) -> find_division_in_exp(exp)
}
}
fn find_division_in_exp(exp: Exp) -> Result(Primitives, String) {
case exp {
OperatorExpr(left, OperatorExpr(num, denom, Div), _) -> {
// Pattern: left_expr + (num / denom) or similar
// Treat as (left_expr + num) / denom
Ok(GoodOverTotal(OperatorExpr(left, num, Add), denom))
}
OperatorExpr(left, right, Div) -> {
Ok(GoodOverTotal(left, right))
}
_ -> Error("Invalid expression")
}
}