use time::Date;
use crate::client::blocking::ClientRequestBuilders;
use crate::client::sync::Client;
use crate::subscriptions::sync::Subscription;
use crate::{common::request_helpers, Error};
use super::builder::{WshEventDataBuilder, WshEventFilterBuilder};
use super::common::stream_decoders::{WshEventDataRequest, WshMetadataRequest};
use super::{encoders, AutoFill, WshEventData, WshMetadata};
impl Client {
pub fn wsh_metadata(&self) -> Result<WshMetadata, Error> {
request_helpers::blocking::one_shot_cancelling::<WshMetadataRequest>(self, encoders::encode_request_wsh_metadata)
}
pub fn wsh_event_data_by_contract(&self, contract_id: i32) -> WshEventDataBuilder<'_, Self> {
WshEventDataBuilder::new(self, contract_id)
}
pub fn wsh_event_data_by_filter<'a>(&'a self, filter: &'a str) -> WshEventFilterBuilder<'a, Self> {
WshEventFilterBuilder::new(self, filter)
}
}
pub(crate) fn wsh_event_data_by_contract(
client: &Client,
contract_id: i32,
start_date: Option<Date>,
end_date: Option<Date>,
limit: Option<i32>,
auto_fill: Option<AutoFill>,
) -> Result<WshEventData, Error> {
request_helpers::blocking::one_shot_cancelling::<WshEventDataRequest>(client, |request_id| {
encoders::encode_request_wsh_event_data(request_id, Some(contract_id), None, start_date, end_date, limit, auto_fill)
})
}
pub(crate) fn wsh_event_data_by_filter(
client: &Client,
filter: &str,
limit: Option<i32>,
auto_fill: Option<AutoFill>,
) -> Result<Subscription<WshEventData>, Error> {
let builder = client.request();
let request = encoders::encode_request_wsh_event_data(
builder.request_id(),
None,
Some(filter),
None, None, limit,
auto_fill,
)?;
builder.send(request)
}
#[cfg(test)]
#[path = "sync_tests.rs"]
mod tests;