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    /// No maker could receive the RFQ, so it closed at once instead of at its TTL.
15    NoEligibleMakers,
16    /// The server stopped before the order reached the keeper; quotes are cancelled.
17    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    /// The session sent `on_disconnect: cancel_quotes` and disconnected.
38    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/// Platform-wide cash-settled spread liability for one quote mint.
115#[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}