Skip to main content

pacifica_rust_sdk/models/ws/
subscriptions.rs

1use std::fmt;
2
3use serde::{Deserialize, Serialize};
4use serde_with::serde_as;
5use solana_sdk::pubkey::Pubkey;
6
7use crate::common::types::{AggLevel, Interval};
8
9#[derive(Serialize, Deserialize, Debug, Clone)]
10#[serde(rename_all = "snake_case")]
11pub enum SubscriptionMethod {
12    Prices,
13    Trades,
14    Book,
15    Candle,
16    Margin,
17    Leverage,
18    AccountInfo,
19    Positions,
20    Orders,
21    AccountOrderUpdates,
22    AccountTrades,
23}
24impl fmt::Display for SubscriptionMethod {
25    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26        let s = match self {
27            SubscriptionMethod::Prices => "prices",
28            SubscriptionMethod::Trades => "trades",
29            SubscriptionMethod::Book => "book",
30            SubscriptionMethod::Candle => "candle",
31            SubscriptionMethod::Margin => "account_margin",
32            SubscriptionMethod::Leverage => "account_leverage",
33            SubscriptionMethod::AccountInfo => "account_info",
34            SubscriptionMethod::Positions => "account_positions",
35            SubscriptionMethod::Orders => "account_orders",
36            SubscriptionMethod::AccountOrderUpdates => "account_order_updates",
37            SubscriptionMethod::AccountTrades => "account_trades",
38        };
39        write!(f, "{}", s)
40    }
41}
42
43#[derive(Serialize, Deserialize, Debug, Clone)]
44pub struct Prices {}
45
46#[derive(Serialize, Deserialize, Debug, Clone)]
47pub struct OrderBook {
48    pub symbol: String,
49    pub agg_level: Option<AggLevel>,
50}
51
52#[derive(Serialize, Deserialize, Debug, Clone)]
53pub struct Trades {
54    pub symbol: String,
55}
56
57#[derive(Serialize, Deserialize, Debug, Clone)]
58pub struct Candle {
59    pub symbol: String,
60    pub interval: Interval,
61}
62
63#[serde_as]
64#[derive(Serialize, Deserialize, Debug, Clone)]
65pub struct Balance {
66    #[serde_as(as = "serde_with::DisplayFromStr")]
67    pub account: Pubkey,
68}
69
70#[serde_as]
71#[derive(Serialize, Deserialize, Debug, Clone)]
72pub struct Margin {
73    #[serde_as(as = "serde_with::DisplayFromStr")]
74    pub account: Pubkey,
75}
76
77#[serde_as]
78#[derive(Serialize, Deserialize, Debug, Clone)]
79pub struct Leverage {
80    #[serde_as(as = "serde_with::DisplayFromStr")]
81    pub account: Pubkey,
82}
83
84#[serde_as]
85#[derive(Serialize, Deserialize, Debug, Clone)]
86pub struct AccountInfo {
87    #[serde_as(as = "serde_with::DisplayFromStr")]
88    pub account: Pubkey,
89}
90
91#[serde_as]
92#[derive(Serialize, Deserialize, Debug, Clone)]
93pub struct Positions {
94    #[serde_as(as = "serde_with::DisplayFromStr")]
95    pub account: Pubkey,
96}
97
98#[serde_as]
99#[derive(Serialize, Deserialize, Debug, Clone)]
100pub struct Orders {
101    #[serde_as(as = "serde_with::DisplayFromStr")]
102    pub account: Pubkey,
103}
104
105#[serde_as]
106#[derive(Serialize, Deserialize, Debug, Clone)]
107pub struct OrderUpdates {
108    #[serde_as(as = "serde_with::DisplayFromStr")]
109    pub account: Pubkey,
110}
111
112#[serde_as]
113#[derive(Serialize, Deserialize, Debug, Clone)]
114pub struct AccountTrades {
115    #[serde_as(as = "serde_with::DisplayFromStr")]
116    pub account: Pubkey,
117}