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}