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}
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    /// The session sent `on_disconnect: cancel_quotes` and disconnected.
35    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/// Platform-wide cash-settled spread liability for one quote mint.
112#[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}