warp_resolver_pkg/
variable.rs1use std::collections::HashMap;
2
3use cosmwasm_schema::cw_serde;
4use cosmwasm_std::{Decimal256, QueryRequest, Uint256};
5
6use super::condition::{DecimalFnOp, IntFnOp, NumExprOp, NumValue};
7
8#[cw_serde]
9pub enum VariableKind {
10 String,
11 Uint,
12 Int,
13 Decimal,
14 Timestamp,
15 Bool,
16 Amount,
17 Asset,
18 Json,
19}
20
21#[cw_serde]
22pub enum VariableValue {
23 Static(String),
24 Query(QueryExpr),
25 External(ExternalExpr),
26}
27
28#[cw_serde]
29pub struct ExternalExpr {
30 pub url: String,
31 pub method: Option<Method>,
32 pub headers: Option<HashMap<String, String>>,
33 pub body: Option<String>,
34 pub selector: String,
35}
36
37#[cw_serde]
38pub enum Method {
39 Get,
40 Post,
41 Put,
42 Patch,
43 Delete,
44}
45
46#[cw_serde]
47pub struct QueryExpr {
48 pub selector: String,
49 pub query: QueryRequest<String>,
50}
51
52#[cw_serde]
53pub enum ExprOp {
54 Add,
55 Sub,
56 Div,
57 Mul,
58 Mod,
59}
60
61#[cw_serde]
62pub enum FnOp {
63 Abs,
64 Neg,
65 Floor,
66 Sqrt,
67 Ceil,
68}
69
70#[cw_serde]
71pub enum UpdateFnValue {
72 Uint(NumValue<Uint256, NumExprOp, IntFnOp>),
73 Int(NumValue<i128, NumExprOp, IntFnOp>),
74 Decimal(NumValue<Decimal256, NumExprOp, DecimalFnOp>),
75 Timestamp(NumValue<i128, NumExprOp, IntFnOp>),
76 BlockHeight(NumValue<i128, NumExprOp, IntFnOp>),
77 Bool(String), }
79
80#[cw_serde]
81pub struct UpdateFn {
82 pub on_success: Option<UpdateFnValue>,
83 pub on_error: Option<UpdateFnValue>,
84}
85
86#[cw_serde]
89pub enum Variable {
90 Static(StaticVariable),
91 External(ExternalVariable),
92 Query(QueryVariable),
93}
94
95#[cw_serde]
96pub struct StaticVariable {
97 pub kind: VariableKind,
98 pub name: String,
99 pub encode: bool,
100 pub value: String,
101 pub update_fn: Option<UpdateFn>,
102}
103
104#[cw_serde]
105pub struct ExternalVariable {
106 pub kind: VariableKind,
107 pub name: String,
108 pub encode: bool,
109 pub init_fn: ExternalExpr,
110 pub reinitialize: bool,
111 pub value: Option<String>, pub update_fn: Option<UpdateFn>,
113}
114
115#[cw_serde]
116pub struct QueryVariable {
117 pub kind: VariableKind,
118 pub name: String,
119 pub encode: bool,
120 pub init_fn: QueryExpr,
121 pub reinitialize: bool,
122 pub value: Option<String>, pub update_fn: Option<UpdateFn>,
124}