Skip to main content

acta_maker_sdk/types/
domain.rs

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    /// No maker could receive the RFQ, so it closed at once instead of at its TTL.
16    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    /// The session sent `on_disconnect: cancel_quotes` and disconnected.
37    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/// Platform-wide cash-settled spread liability for one quote mint.
114#[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}