warp_resolver_pkg/
condition.rs

1use std::str;
2
3use cosmwasm_schema::cw_serde;
4use cosmwasm_std::{Decimal256, Uint256, Uint64};
5
6#[cw_serde]
7pub enum Condition {
8    And(Vec<Box<Condition>>),
9    Or(Vec<Box<Condition>>),
10    Not(Box<Condition>),
11    Expr(Box<Expr>),
12}
13
14#[cw_serde]
15pub struct GenExpr<Type, Op> {
16    pub left: Type,
17    pub op: Op,
18    pub right: Type,
19}
20
21#[cw_serde]
22pub struct TimeExpr {
23    pub comparator: Uint64,
24    pub op: TimeOp, //tmp: fix this post-comp
25}
26
27#[cw_serde]
28pub struct BlockExpr {
29    pub comparator: Uint64,
30    pub op: NumOp,
31}
32
33#[cw_serde]
34pub enum Value<T> {
35    Simple(T),
36    Ref(String),
37}
38
39#[cw_serde]
40pub enum NumValue<T, ExprOp, FnOp> {
41    Simple(T),
42    Expr(NumExprValue<T, ExprOp, FnOp>),
43    Ref(String),
44    Fn(NumFnValue<T, ExprOp, FnOp>),
45    Env(NumEnvValue),
46}
47
48#[cw_serde]
49pub enum NumEnvValue {
50    Time,
51    BlockHeight,
52}
53
54#[cw_serde]
55pub struct NumExprValue<T, ExprOp, FnOp> {
56    pub left: Box<NumValue<T, ExprOp, FnOp>>,
57    pub op: ExprOp,
58    pub right: Box<NumValue<T, ExprOp, FnOp>>,
59}
60
61#[cw_serde]
62pub struct NumFnValue<T, ExprOp, FnOp> {
63    pub op: FnOp,
64    pub right: Box<NumValue<T, ExprOp, FnOp>>,
65}
66
67#[cw_serde]
68pub enum NumExprOp {
69    Add,
70    Sub,
71    Div,
72    Mul,
73    Mod,
74}
75
76#[cw_serde]
77pub enum DecimalFnOp {
78    Abs,
79    Neg,
80    Floor,
81    Sqrt,
82    Ceil,
83}
84
85#[cw_serde]
86pub enum IntFnOp {
87    Abs,
88    Neg,
89}
90
91#[cw_serde]
92pub enum Expr {
93    String(GenExpr<Value<String>, StringOp>),
94    Uint(GenExpr<NumValue<Uint256, NumExprOp, IntFnOp>, NumOp>),
95    Int(GenExpr<NumValue<i128, NumExprOp, IntFnOp>, NumOp>),
96    Decimal(GenExpr<NumValue<Decimal256, NumExprOp, DecimalFnOp>, NumOp>),
97    Timestamp(TimeExpr),
98    BlockHeight(BlockExpr),
99    Bool(String), //ref
100}
101
102// #[cw_serde]
103// pub enum BoolExpr {
104//     Ref(String),
105// }
106
107#[cw_serde]
108pub enum NumOp {
109    Eq,
110    Neq,
111    Lt,
112    Gt,
113    Gte,
114    Lte,
115}
116
117#[cw_serde]
118pub enum TimeOp {
119    Lt,
120    Gt,
121}
122
123#[cw_serde]
124pub enum StringOp {
125    StartsWith,
126    EndsWith,
127    Contains,
128    Eq,
129    Neq,
130}