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