1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
use cosmwasm_schema::QueryResponses;
use cosmwasm_std::Addr;
use serde::Serialize;
#[cosmwasm_schema::cw_serde]
pub struct BaseInstantiateMsg {
pub memory_address: String,
pub version_control_address: String,
}
#[cosmwasm_schema::cw_serde]
pub enum ExecuteMsg<T: Serialize> {
Request(ApiRequestMsg<T>),
Configure(BaseExecuteMsg),
}
impl<T: Serialize> From<BaseExecuteMsg> for ExecuteMsg<T> {
fn from(api_msg: BaseExecuteMsg) -> Self {
Self::Configure(api_msg)
}
}
impl<T: Serialize> From<ApiRequestMsg<T>> for ExecuteMsg<T> {
fn from(request_msg: ApiRequestMsg<T>) -> Self {
Self::Request(request_msg)
}
}
#[cosmwasm_schema::cw_serde]
pub struct ApiRequestMsg<T: Serialize> {
pub proxy_address: Option<String>,
pub request: T,
}
impl<T: Serialize> ApiRequestMsg<T> {
pub fn new(proxy_address: Option<String>, request: T) -> Self {
Self {
proxy_address,
request,
}
}
}
#[cosmwasm_schema::cw_serde]
pub enum BaseExecuteMsg {
UpdateTraders {
to_add: Option<Vec<String>>,
to_remove: Option<Vec<String>>,
},
Remove {},
}
#[cosmwasm_schema::cw_serde]
pub enum QueryMsg<Q: Serialize> {
Api(Q),
Base(BaseQueryMsg),
}
#[cosmwasm_schema::cw_serde]
#[derive(QueryResponses)]
pub enum BaseQueryMsg {
#[returns(ApiConfigResponse)]
Config {},
#[returns(TradersResponse)]
Traders { proxy_address: String },
}
#[cosmwasm_schema::cw_serde]
pub struct ApiConfigResponse {
pub version_control_address: Addr,
pub memory_address: Addr,
pub dependencies: Vec<String>,
}
#[cosmwasm_schema::cw_serde]
pub struct TradersResponse {
pub traders: Vec<Addr>,
}