1use cosmwasm_std::{CustomQuery, QueryRequest};
2use cosmwasm_schema::{cw_serde, QueryResponses};
3#[allow(unused_imports)]
4use crate::query_res::*;
5use crate::tokenfactory::query::TokenFactoryQuery;
6
7#[cw_serde]
8#[derive(QueryResponses)]
9#[query_responses(nested)]
10#[serde(untagged)]
11pub enum CyberQuery {
12 Rank(RankQuery),
13 Graph(GraphQuery),
14 DMN(DMNQuery),
15 Grid(GridQuery),
16 Bandwidth(BandwidthQuery),
17 Liquidity(LiquidityQuery),
18 TokenFactory(TokenFactoryQuery)
19}
20
21#[cw_serde]
22#[derive(QueryResponses)]
23pub enum RankQuery {
24 #[returns(ParticleRankResponse)]
25 ParticleRank { particle: String },
26}
27#[cw_serde]
28#[derive(QueryResponses)]
29pub enum GraphQuery {
30 #[returns(GraphStatsResponse)]
31 GraphStats {},
32}
33#[cw_serde]
34#[derive(QueryResponses)]
35pub enum DMNQuery {
36 #[returns(ThoughtResponse)]
37 Thought { program: String, name: String },
38 #[returns(ThoughtStatsResponse)]
39 ThoughtStats { program: String, name: String },
40 #[returns(ThoughtsFeesResponse)]
41 ThoughtsFees {},
42}
43#[cw_serde]
44#[derive(QueryResponses)]
45pub enum GridQuery {
46 #[returns(RoutesResponse)]
47 SourceRoutes { source: String },
48 #[returns(RoutedEnergyResponse)]
49 SourceRoutedEnergy { source: String },
50 #[returns(RoutedEnergyResponse)]
51 DestinationRoutedEnergy { destination: String },
52 #[returns(RouteResponse)]
53 Route { source: String, destination: String },
54}
55#[cw_serde]
56#[derive(QueryResponses)]
57pub enum BandwidthQuery {
58 #[returns(BandwidthPriceResponse)]
59 BandwidthPrice {},
60 #[returns(BandwidthLoadResponse)]
61 BandwidthLoad {},
62 #[returns(TotalBandwidthResponse)]
63 TotalBandwidth {},
64 #[returns(NeuronBandwidthResponse)]
65 NeuronBandwidth { neuron: String },
66}
67#[cw_serde]
68#[derive(QueryResponses)]
69pub enum LiquidityQuery {
70 #[returns(PoolParamsResponse)]
72 PoolParams { pool_id: u64 },
73 #[returns(PoolLiquidityResponse)]
74 PoolLiquidity { pool_id: u64 },
75 #[returns(PoolSupplyResponse)]
76 PoolSupply { pool_id: u64 },
77 #[returns(PoolPriceResponse)]
78 PoolPrice { pool_id: u64 },
79 #[returns(PoolAddressResponse)]
80 PoolAddress { pool_id: u64 },
81}
82
83impl CustomQuery for CyberQuery {}
84
85impl From<RankQuery> for QueryRequest<CyberQuery> {
86 fn from(msg: RankQuery) -> Self {
87 QueryRequest::Custom(CyberQuery::Rank(msg))
88 }
89}
90
91
92impl From<GraphQuery> for QueryRequest<CyberQuery> {
93 fn from(msg: GraphQuery) -> Self {
94 QueryRequest::Custom(CyberQuery::Graph(msg))
95 }
96}
97
98impl From<DMNQuery> for QueryRequest<CyberQuery> {
99 fn from(msg: DMNQuery) -> Self {
100 QueryRequest::Custom(CyberQuery::DMN(msg))
101 }
102}
103
104impl From<GridQuery> for QueryRequest<CyberQuery> {
105 fn from(msg: GridQuery) -> Self {
106 QueryRequest::Custom(CyberQuery::Grid(msg))
107 }
108}
109
110impl From<BandwidthQuery> for QueryRequest<CyberQuery> {
111 fn from(msg: BandwidthQuery) -> Self {
112 QueryRequest::Custom(CyberQuery::Bandwidth(msg))
113 }
114}
115
116impl From<LiquidityQuery> for QueryRequest<CyberQuery> {
117 fn from(msg: LiquidityQuery) -> Self {
118 QueryRequest::Custom(CyberQuery::Liquidity(msg))
119 }
120}
121impl From<TokenFactoryQuery> for QueryRequest<CyberQuery> {
122 fn from(msg: TokenFactoryQuery) -> Self {
123 QueryRequest::Custom(CyberQuery::TokenFactory(msg))
124 }
125}
126
127impl CyberQuery {
128 pub fn particle_rank(particle: String) -> Self {
129 Self::Rank(RankQuery::ParticleRank { particle })
130 }
131
132 pub fn graph_stats() -> Self {
133 Self::Graph(GraphQuery::GraphStats {})
134 }
135
136 pub fn thought(program: String, name: String) -> Self {
137 Self::DMN(DMNQuery::Thought { program, name })
138 }
139
140 pub fn thought_stats(program: String, name: String) -> Self {
141 Self::DMN(DMNQuery::ThoughtStats { program, name })
142 }
143
144 pub fn thoughts_fees() -> Self {
145 Self::DMN(DMNQuery::ThoughtsFees {})
146 }
147
148 pub fn source_routes(source: String) -> Self {
149 Self::Grid(GridQuery::SourceRoutes { source })
150 }
151
152 pub fn source_routed_energy(source: String) -> Self {
153 Self::Grid(GridQuery::SourceRoutedEnergy { source })
154 }
155
156 pub fn destination_routed_energy(destination: String) -> Self {
157 Self::Grid(GridQuery::DestinationRoutedEnergy { destination })
158 }
159
160 pub fn route(source: String, destination: String) -> Self {
161 Self::Grid(GridQuery::Route { source, destination })
162 }
163
164 pub fn bandwidth_price() -> Self {
165 Self::Bandwidth(BandwidthQuery::BandwidthPrice {})
166 }
167
168 pub fn bandwidth_load() -> Self {
169 Self::Bandwidth(BandwidthQuery::BandwidthLoad {})
170 }
171
172 pub fn bandwidth_total() -> Self {
173 Self::Bandwidth(BandwidthQuery::TotalBandwidth {})
174 }
175
176 pub fn neuron_bandwidth(neuron: String) -> Self {
177 Self::Bandwidth(BandwidthQuery::NeuronBandwidth { neuron })
178 }
179
180 pub fn pool_params(pool_id: u64) -> Self {
181 Self::Liquidity(LiquidityQuery::PoolParams { pool_id })
182 }
183
184 pub fn pool_liquidity(pool_id: u64) -> Self {
185 Self::Liquidity(LiquidityQuery::PoolLiquidity { pool_id })
186 }
187
188 pub fn pool_supply(pool_id: u64) -> Self {
189 Self::Liquidity(LiquidityQuery::PoolSupply { pool_id })
190 }
191
192 pub fn pool_price(pool_id: u64) -> Self {
193 Self::Liquidity(LiquidityQuery::PoolPrice { pool_id })
194 }
195
196 pub fn pool_address(pool_id: u64) -> Self {
197 Self::Liquidity(LiquidityQuery::PoolAddress { pool_id })
198 }
199
200 pub fn full_denom(creator_addr: String, subdenom: String) -> Self {
201 Self::TokenFactory(TokenFactoryQuery::FullDenom { creator_addr, subdenom })
202 }
203
204 pub fn denom_metadata(denom: String) -> Self {
205 Self::TokenFactory(TokenFactoryQuery::Metadata { denom })
206 }
207
208 pub fn denom_admin(denom: String) -> Self {
209 Self::TokenFactory(TokenFactoryQuery::Admin { denom })
210 }
211
212 pub fn denoms_by_creator(creator: String) -> Self {
213 Self::TokenFactory(TokenFactoryQuery::DenomsByCreator { creator })
214 }
215
216 pub fn denom_creation_fee() -> Self {
217 Self::TokenFactory(TokenFactoryQuery::Params { })
218 }
219}