use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "UPPERCASE")]
pub enum SubscriptionType {
Quote,
Order,
Account,
Trade,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubscriptionRequest {
#[serde(rename = "type")]
pub subscription_type: SubscriptionType,
#[serde(skip_serializing_if = "Option::is_none")]
pub symbols: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub account_id: Option<String>,
}
impl SubscriptionRequest {
pub fn new_quote(symbols: Vec<String>) -> Self {
Self {
subscription_type: SubscriptionType::Quote,
symbols: Some(symbols),
account_id: None,
}
}
pub fn new_order(account_id: String) -> Self {
Self {
subscription_type: SubscriptionType::Order,
symbols: None,
account_id: Some(account_id),
}
}
pub fn new_account(account_id: String) -> Self {
Self {
subscription_type: SubscriptionType::Account,
symbols: None,
account_id: Some(account_id),
}
}
pub fn new_trade(account_id: String) -> Self {
Self {
subscription_type: SubscriptionType::Trade,
symbols: None,
account_id: Some(account_id),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UnsubscriptionRequest {
#[serde(rename = "type")]
pub subscription_type: SubscriptionType,
#[serde(skip_serializing_if = "Option::is_none")]
pub symbols: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub account_id: Option<String>,
}
impl UnsubscriptionRequest {
pub fn new_quote(symbols: Vec<String>) -> Self {
Self {
subscription_type: SubscriptionType::Quote,
symbols: Some(symbols),
account_id: None,
}
}
pub fn new_order(account_id: String) -> Self {
Self {
subscription_type: SubscriptionType::Order,
symbols: None,
account_id: Some(account_id),
}
}
pub fn new_account(account_id: String) -> Self {
Self {
subscription_type: SubscriptionType::Account,
symbols: None,
account_id: Some(account_id),
}
}
pub fn new_trade(account_id: String) -> Self {
Self {
subscription_type: SubscriptionType::Trade,
symbols: None,
account_id: Some(account_id),
}
}
}