warp_resolver_pkg/
variable.rs

1use 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), //ref
78}
79
80#[cw_serde]
81pub struct UpdateFn {
82    pub on_success: Option<UpdateFnValue>,
83    pub on_error: Option<UpdateFnValue>,
84}
85
86// Variable is specified as a reference value (string) in form of $warp.variable.{name}
87// - variables are supplied along with the input (msg, query, template)
88#[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>, //none if uninitialized
112    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>, //none if uninitialized
123    pub update_fn: Option<UpdateFn>,
124}