ibapi 3.0.0

A Rust implementation of the Interactive Brokers TWS API, providing a reliable and user friendly interface for TWS and IB Gateway. Designed with a focus on simplicity and performance.
Documentation
//! Encoders for Wall Street Horizon messages

use time::Date;

use crate::messages::OutgoingMessages;
use crate::wsh::AutoFill;
use crate::Error;

pub(in crate::wsh) fn encode_request_wsh_metadata(request_id: i32) -> Result<Vec<u8>, Error> {
    crate::proto::encoders::encode_cancel_by_id!(request_id, WshMetaDataRequest, OutgoingMessages::RequestWshMetaData)
}

pub(in crate::wsh) fn encode_cancel_wsh_metadata(request_id: i32) -> Result<Vec<u8>, Error> {
    crate::proto::encoders::encode_cancel_by_id!(request_id, CancelWshMetaData, OutgoingMessages::CancelWshMetaData)
}

pub(in crate::wsh) fn encode_request_wsh_event_data(
    request_id: i32,
    contract_id: Option<i32>,
    filter: Option<&str>,
    start_date: Option<Date>,
    end_date: Option<Date>,
    limit: Option<i32>,
    auto_fill: Option<AutoFill>,
) -> Result<Vec<u8>, Error> {
    use crate::messages::encode_protobuf_message;
    use prost::Message;
    let format = time::format_description::parse("[year][month][day]").unwrap();
    let request = crate::proto::WshEventDataRequest {
        req_id: Some(request_id),
        con_id: contract_id,
        filter: filter.map(|s| s.to_string()),
        fill_watchlist: auto_fill.as_ref().map(|af| af.watchlist),
        fill_portfolio: auto_fill.as_ref().map(|af| af.portfolio),
        fill_competitors: auto_fill.as_ref().map(|af| af.competitors),
        start_date: start_date.and_then(|d| d.format(&format).ok()),
        end_date: end_date.and_then(|d| d.format(&format).ok()),
        total_limit: limit,
    };
    Ok(encode_protobuf_message(
        OutgoingMessages::RequestWshEventData as i32,
        &request.encode_to_vec(),
    ))
}

pub(in crate::wsh) fn encode_cancel_wsh_event_data(request_id: i32) -> Result<Vec<u8>, Error> {
    crate::proto::encoders::encode_cancel_by_id!(request_id, CancelWshEventData, OutgoingMessages::CancelWshEventData)
}

// Encoder body assertions live in the migrated sync/async tests via
// `assert_request<B>(builder)`.