use time::Date;
use crate::{client::ClientRequestBuilders, common::request_helpers, subscriptions::Subscription, Client, Error};
use super::builder::{WshEventDataBuilder, WshEventFilterBuilder};
use super::common::stream_decoders::{WshEventDataRequest, WshMetadataRequest};
use super::{encoders, AutoFill, WshEventData, WshMetadata};
impl Client {
pub async fn wsh_metadata(&self) -> Result<WshMetadata, Error> {
request_helpers::one_shot_cancelling::<WshMetadataRequest>(self, encoders::encode_request_wsh_metadata).await
}
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) async 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::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)
})
.await
}
pub(crate) async 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).await
}
#[cfg(test)]
#[path = "async_tests.rs"]
mod tests;