1use serde::{Deserialize, Serialize};
2use strum::IntoStaticStr;
3
4use super::ids::{Balance, MarketId, Quantity};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, IntoStaticStr)]
7#[serde(rename_all = "snake_case")]
8#[strum(serialize_all = "snake_case")]
9pub enum RfqCloseReason {
10 Expired,
11 TakerCancelled,
12 Filled,
13 MarketExpired,
14 NoEligibleMakers,
16 ServerShutdown,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, IntoStaticStr)]
21#[serde(rename_all = "snake_case")]
22#[strum(serialize_all = "snake_case")]
23pub enum QuoteFinalStatus {
24 Expired,
25 Outbid,
26 Cancelled,
27 Filled,
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, IntoStaticStr)]
31#[serde(rename_all = "snake_case")]
32#[strum(serialize_all = "snake_case")]
33pub enum QuoteCancelReason {
34 Requested,
35 RiskCheck,
36 RfqAccepted,
37 MakerDisconnected,
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, IntoStaticStr)]
42#[serde(rename_all = "snake_case")]
43#[strum(serialize_all = "snake_case")]
44pub enum QuoteExpiryReason {
45 Expired,
46 ExpiringSoon,
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, IntoStaticStr)]
50#[serde(rename_all = "snake_case")]
51#[strum(serialize_all = "snake_case")]
52pub enum RfqAvailableAgainReason {
53 SignatureTimeout,
54 TxFailed,
55 TxBuildFailed,
56}
57
58impl std::fmt::Display for RfqAvailableAgainReason {
59 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
60 formatter.write_str(self.into())
61 }
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct TokenCapInfo {
66 pub underlying_mint: crate::Address32,
67 pub symbol: String,
68 pub current_oi: Quantity,
69 pub max_oi: Quantity,
70 pub utilization: f64,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct MarketCapInfo {
75 pub market_id: MarketId,
76 pub current_oi: Quantity,
77 pub max_oi: Quantity,
78 pub utilization: f64,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct MakerPositionCapInfo {
83 pub current: u32,
84 pub limit: u32,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
88pub struct MakerNotionalCapInfo {
89 pub underlying_mint: crate::Address32,
90 pub symbol: String,
91 pub current: Quantity,
92 pub limit: Quantity,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize)]
96pub struct MakerBalanceCapInfo {
97 pub mint: crate::Address32,
98 pub symbol: String,
99 pub decimals: u8,
100 pub deposited: Balance,
101 pub committed: Balance,
102 pub available: Balance,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct QuoteCapInfo {
107 pub quote_mint: crate::Address32,
108 pub symbol: String,
109 pub current_notional: Balance,
110 pub max_notional: Balance,
111 pub utilization: f64,
112}
113
114#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct QuoteLiabilityCapInfo {
117 pub quote_mint: crate::Address32,
118 pub symbol: String,
119 pub current_liability: Balance,
120 pub policy: QuoteLiabilityPolicy,
121}
122
123#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
124#[serde(tag = "type", rename_all = "snake_case", deny_unknown_fields)]
125pub enum QuoteLiabilityPolicy {
126 Unconfigured {},
127 Unlimited {},
128 Limited {
129 max_liability: Balance,
130 headroom: Balance,
131 },
132}