1use cosmwasm_std::{Addr, CustomQuery};
2use schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4
5use injective_math::FPDecimal;
6
7use crate::oracle::{
8 types::{OracleHistoryOptions, OracleInfo, OracleType},
9 volatility::TradeHistoryOptions,
10};
11use crate::route::InjectiveRoute;
12use crate::{
13 exchange::{
14 cancel::CancellationStrategy,
15 order::OrderSide,
16 types::{MarketId, SubaccountId},
17 },
18 oracle::types::ScalingOptions,
19};
20
21#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
22#[serde(rename_all = "snake_case")]
23pub struct InjectiveQueryWrapper {
24 pub route: InjectiveRoute,
25 pub query_data: InjectiveQuery,
26}
27
28#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
30#[serde(rename_all = "snake_case")]
31pub enum InjectiveQuery {
32 ExchangeParams {},
34 SubaccountDeposit {
35 subaccount_id: SubaccountId,
36 denom: String,
37 },
38 SpotMarket {
39 market_id: MarketId,
40 },
41 TraderSpotOrders {
42 market_id: MarketId,
43 subaccount_id: SubaccountId,
44 },
45 TraderSpotOrdersToCancelUpToAmount {
46 market_id: MarketId,
47 subaccount_id: SubaccountId,
48 base_amount: FPDecimal,
49 quote_amount: FPDecimal,
50 strategy: CancellationStrategy,
51 reference_price: Option<FPDecimal>,
52 },
53 TraderDerivativeOrdersToCancelUpToAmount {
54 market_id: MarketId,
55 subaccount_id: SubaccountId,
56 quote_amount: FPDecimal,
57 strategy: CancellationStrategy,
58 reference_price: Option<FPDecimal>,
59 },
60 DerivativeMarket {
61 market_id: MarketId,
62 },
63 SubaccountPositions {
64 subaccount_id: SubaccountId,
65 },
66 SubaccountPositionInMarket {
67 market_id: MarketId,
68 subaccount_id: SubaccountId,
69 },
70 SubaccountEffectivePositionInMarket {
71 market_id: MarketId,
72 subaccount_id: SubaccountId,
73 },
74 TraderDerivativeOrders {
75 market_id: MarketId,
76 subaccount_id: SubaccountId,
77 },
78 TraderTransientSpotOrders {
79 market_id: MarketId,
80 subaccount_id: SubaccountId,
81 },
82 TraderTransientDerivativeOrders {
83 market_id: MarketId,
84 subaccount_id: SubaccountId,
85 },
86 PerpetualMarketInfo {
87 market_id: MarketId,
88 },
89 PerpetualMarketFunding {
90 market_id: MarketId,
91 },
92 MarketVolatility {
94 market_id: MarketId,
95 trade_history_options: TradeHistoryOptions,
96 },
97 SpotMarketMidPriceAndTob {
98 market_id: MarketId,
99 },
100 SpotOrderbook {
101 market_id: MarketId,
102 limit: u64,
103 order_side: OrderSide,
104 limit_cumulative_quantity: Option<FPDecimal>,
105 limit_cumulative_notional: Option<FPDecimal>,
106 },
107 DerivativeOrderbook {
108 market_id: MarketId,
109 limit: u64,
110 limit_cumulative_notional: Option<FPDecimal>,
111 },
112 DerivativeMarketMidPriceAndTob {
113 market_id: MarketId,
114 },
115 AggregateMarketVolume {
116 market_id: MarketId,
117 },
118 AggregateAccountVolume {
119 account: String,
120 },
121 MarketAtomicExecutionFeeMultiplier {
122 market_id: MarketId,
123 },
124 StakedAmount {
126 delegator_address: Addr,
127 max_delegations: u16,
128 },
129 OracleVolatility {
131 base_info: Option<OracleInfo>,
132 quote_info: Option<OracleInfo>,
133 oracle_history_options: Option<OracleHistoryOptions>,
134 },
135 OraclePrice {
136 oracle_type: OracleType,
137 base: String,
138 quote: String,
139 scaling_options: Option<ScalingOptions>,
140 },
141 PythPrice {
142 price_id: String,
143 },
144 TokenFactoryDenomTotalSupply {
145 denom: String,
146 },
147 TokenFactoryDenomCreationFee {},
148 WasmxRegisteredContractInfo {
150 contract_address: String,
151 },
152}
153
154impl CustomQuery for InjectiveQueryWrapper {}