pub mod builder;
pub mod historical;
pub mod realtime;
#[cfg(feature = "async")]
use crate::{server_versions, Error};
use serde::{Deserialize, Serialize};
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum TradingHours {
#[default]
Regular,
Extended,
}
impl TradingHours {
pub fn use_rth(&self) -> bool {
matches!(self, TradingHours::Regular)
}
pub fn from_use_rth(use_rth: bool) -> Self {
if use_rth {
TradingHours::Regular
} else {
TradingHours::Extended
}
}
}
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MarketDataType {
Realtime = 1,
Frozen = 2,
Delayed = 3,
DelayedFrozen = 4,
}
#[cfg(feature = "async")]
pub(crate) async fn switch_market_data_type(client: &crate::client::r#async::Client, market_data_type: MarketDataType) -> Result<(), Error> {
client.check_server_version(server_versions::REQ_MARKET_DATA_TYPE, "It does not support market data type requests.")?;
let message = encoders::encode_request_market_data_type(market_data_type)?;
client.send_message(message).await?;
Ok(())
}
mod encoders {
use crate::messages::{OutgoingMessages, RequestMessage};
use crate::Error;
use super::MarketDataType;
pub(super) fn encode_request_market_data_type(market_data_type: MarketDataType) -> Result<RequestMessage, Error> {
const VERSION: i32 = 1;
let mut message = RequestMessage::new();
message.push_field(&OutgoingMessages::RequestMarketDataType);
message.push_field(&VERSION);
message.push_field(&(market_data_type as i32));
Ok(message)
}
}
#[cfg(feature = "sync")]
pub(crate) mod blocking {
use crate::{client::sync::Client, messages::OutgoingMessages, server_versions, Error};
use super::{encoders, MarketDataType};
pub(crate) fn switch_market_data_type(client: &Client, market_data_type: MarketDataType) -> Result<(), Error> {
client.check_server_version(server_versions::REQ_MARKET_DATA_TYPE, "It does not support market data type requests.")?;
let message = encoders::encode_request_market_data_type(market_data_type)?;
let _ = client.send_shared_request(OutgoingMessages::RequestMarketDataType, message)?;
Ok(())
}
}