use std::io;
use bytes::BytesMut;
use super::constants::*;
use super::context::{Context, DispatchId};
use super::error::EncodeError;
use super::request::*;
use super::response::*;
use super::wire::{TwsWireDecoder, TwsWireEncoder};
pub fn encode_query_display_groups(
_ctx: &mut Context,
buf: &mut BytesMut,
req: &QueryDisplayGroups,
) -> Result<DispatchId, EncodeError> {
const VERSION: i32 = 1;
buf.push_int(QUERY_DISPLAY_GROUPS);
buf.push_int(VERSION);
buf.push_int(req.req_id);
Ok(DispatchId::Oneshot(req.req_id))
}
pub fn decode_display_group_list_msg(
_ctx: &mut Context,
buf: &mut BytesMut,
) -> Result<(Response, i32), io::Error> {
let _version = buf.read_int()?;
let req_id = buf.read_int()?;
let groups = buf.read_string()?;
Ok((
Response::DisplayGroupListMsg(DisplayGroupListMsg { req_id, groups }),
req_id,
))
}
pub fn encode_subscribe_to_group_event(
_ctx: &mut Context,
buf: &mut BytesMut,
req: &SubscribeToGroupEvents,
) -> Result<DispatchId, EncodeError> {
const VERSION: i32 = 1;
buf.push_int(SUBSCRIBE_TO_GROUP_EVENTS);
buf.push_int(VERSION);
buf.push_int(req.req_id);
buf.push_int(req.group_id);
Ok(DispatchId::Oneshot(req.req_id))
}
pub fn encode_unsubscribe_from_group_events(
_ctx: &mut Context,
buf: &mut BytesMut,
req: &UbsubscribeFromGroupEvents,
) -> Result<DispatchId, EncodeError> {
const VERSION: i32 = 1;
buf.push_int(UNSUBSCRIBE_FROM_GROUP_EVENTS);
buf.push_int(VERSION);
buf.push_int(req.req_id);
Ok(DispatchId::Oneshot(req.req_id))
}
pub fn decode_display_group_updated_msg(
_ctx: &mut Context,
buf: &mut BytesMut,
) -> Result<(Response, i32), io::Error> {
let _version = buf.read_int()?;
let req_id = buf.read_int()?;
let contract_info = buf.read_string()?;
Ok((
Response::DisplayGroupUpdatedMsg(DisplayGroupUpdatedMsg {
req_id,
contract_info,
}),
OPCODE_DISPLAY_GROUP_UPDATED_MSG,
))
}
pub fn encode_update_display_group(
_ctx: &mut Context,
buf: &mut BytesMut,
req: &UpdateDisplayGroup,
) -> Result<DispatchId, EncodeError> {
const VERSION: i32 = 1;
buf.push_int(UPDATE_DISPLAY_GROUP);
buf.push_int(VERSION);
buf.push_int(req.req_id);
buf.push_string(&req.contract_info);
Ok(DispatchId::Oneshot(req.req_id))
}