use crate::constant::Exchange;
use crate::symbol::{SymbolError, vt_symbol};
use std::str::FromStr;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SubscribeRequest {
pub symbol: String,
pub exchange: Exchange,
}
impl SubscribeRequest {
pub fn from_vt_symbol(vt: &str) -> Result<Self, SymbolError> {
crate::symbol::parse_vt_symbol(vt).map(|(symbol, exchange)| Self { symbol, exchange })
}
pub fn en_symbol(&self) -> String {
vt_symbol(&self.symbol, self.exchange)
}
}
impl FromStr for SubscribeRequest {
type Err = SymbolError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Self::from_vt_symbol(s)
}
}