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