type_eval/
ctrl_types.rs

1use core::marker::PhantomData;
2
3use crate::{
4    BoolExpr, OrdExpr,
5    _inners::{_ExprMode, _Recurse},
6};
7
8pub trait BoolVal {}
9
10pub struct True;
11impl BoolVal for True {}
12pub struct False;
13impl BoolVal for False {}
14
15impl BoolExpr for True {
16    type Ret = Self;
17}
18impl BoolExpr for False {
19    type Ret = Self;
20}
21
22pub trait OrdVal {}
23
24pub struct Less;
25impl OrdVal for Less {}
26pub struct Gr8r;
27impl OrdVal for Gr8r {}
28pub struct Eq;
29impl OrdVal for Eq {}
30
31impl OrdExpr for Less {
32    type Ret = Self;
33}
34impl OrdExpr for Gr8r {
35    type Ret = Self;
36}
37impl OrdExpr for Eq {
38    type Ret = Self;
39}
40
41pub struct IF<C: BoolExpr, T, F, M: _ExprMode = _Recurse> {
42    _if_check: PhantomData<C>,
43    _true_branch: PhantomData<T>,
44    _false_branch: PhantomData<F>,
45    _m: PhantomData<M>,
46}
47pub struct LT<L, R, M: _ExprMode = _Recurse> {
48    _l: PhantomData<L>,
49    _r: PhantomData<R>,
50    _m: PhantomData<M>,
51}
52pub struct GT<L, R, M: _ExprMode = _Recurse> {
53    _l: PhantomData<L>,
54    _r: PhantomData<R>,
55    _m: PhantomData<M>,
56}
57#[allow(clippy::upper_case_acronyms)]
58pub struct LTE<L, R, M: _ExprMode = _Recurse> {
59    _l: PhantomData<L>,
60    _r: PhantomData<R>,
61    _m: PhantomData<M>,
62}
63#[allow(clippy::upper_case_acronyms)]
64pub struct GTE<L, R, M: _ExprMode = _Recurse> {
65    _l: PhantomData<L>,
66    _r: PhantomData<R>,
67    _m: PhantomData<M>,
68}
69pub struct EQ<L, R, M: _ExprMode = _Recurse> {
70    _l: PhantomData<L>,
71    _r: PhantomData<R>,
72    _m: PhantomData<M>,
73}
74#[allow(clippy::upper_case_acronyms)]
75pub struct AND<L, R, M: _ExprMode = _Recurse> {
76    _l: PhantomData<L>,
77    _r: PhantomData<R>,
78    _m: PhantomData<M>,
79}
80pub struct OR<L, R, M: _ExprMode = _Recurse> {
81    _l: PhantomData<L>,
82    _r: PhantomData<R>,
83    _m: PhantomData<M>,
84}
85pub struct NOT<B> {
86    _bool: PhantomData<B>,
87}
88
89pub struct ORD<L, R, M: _ExprMode = _Recurse> {
90    _l: PhantomData<L>,
91    _r: PhantomData<R>,
92    _m: PhantomData<M>,
93}