ib_tws_core 0.2.0

Core utilities for interacting with Interactive Broker's TWS API
Documentation
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};
use crate::domain::*;

pub fn encode_req_family_codes(
    ctx: &mut Context,
    buf: &mut BytesMut,
    _req: &ReqFamilyCodes,
) -> Result<DispatchId, EncodeError> {
    if ctx.server_version() < MIN_SERVER_VER_REQ_FAMILY_CODES {
        return Err(EncodeError::VersionLessError(
            MIN_SERVER_VER_REQ_FAMILY_CODES,
        ));
    }
    buf.push_int(REQ_FAMILY_CODES);

    Ok(DispatchId::Global(OPCODE_REQ_FAMILY_CODES))
}

pub fn decode_family_codes_msg(
    _ctx: &mut Context,
    buf: &mut BytesMut,
) -> Result<(Response, i32), io::Error> {
    let count = buf.read_int()?;
    let mut family_codes = Vec::new();
    for _ in 0..count {
        let account_id = buf.read_string()?;
        let family_code = buf.read_string()?;
        let family = FamilyCode {
            account_id,
            family_code,
        };
        family_codes.push(family);
    }

    Ok((
        Response::FamilyCodesMsg(FamilyCodesMsg { family_codes }),
        OPCODE_REQ_FAMILY_CODES,
    ))
}