ibapi 5.4.0

An unofficial Rust client for the Interactive Brokers TWS API: market data, orders, and account data, with async (Tokio) and blocking clients for TWS and IB Gateway.
Documentation
use super::*;

#[test]
fn classify_by_range() {
    let floor = REQUEST_ID_FLOOR;
    let cases = [
        (-1, None),
        (-5, Some(WireId::Order(OrderId(-5)))),
        (0, Some(WireId::Order(OrderId(0)))),
        (floor - 1, Some(WireId::Order(OrderId(floor - 1)))),
        (floor, Some(WireId::Request(RequestId(floor)))),
        (REQUEST_ID_CEILING, Some(WireId::Request(RequestId(REQUEST_ID_CEILING)))),
        (i32::MAX, Some(WireId::Request(RequestId(i32::MAX)))),
    ];
    for (id, expected) in cases {
        assert_eq!(WireId::classify(id), expected, "id {id}");
    }
}

#[test]
fn request_id_from_raw_rejects_below_floor() {
    assert_eq!(RequestId::from_raw(REQUEST_ID_FLOOR - 1), None);
    assert_eq!(RequestId::from_raw(REQUEST_ID_FLOOR).map(RequestId::raw), Some(REQUEST_ID_FLOOR));
}

#[test]
fn order_id_checked_rejects_request_range() {
    assert_eq!(OrderId::from(REQUEST_ID_FLOOR - 1).checked().unwrap().value(), REQUEST_ID_FLOOR - 1);
    assert_eq!(OrderId::from(-5).checked().unwrap().value(), -5);

    let err = OrderId::from(REQUEST_ID_FLOOR).checked().unwrap_err();
    assert!(
        matches!(err, Error::OrderIdInRequestRange { order_id } if order_id == REQUEST_ID_FLOOR),
        "{err:?}"
    );
}

#[test]
fn display_is_the_raw_value() {
    assert_eq!(OrderId::from(42).to_string(), "42");
    assert_eq!(RequestId(REQUEST_ID_FLOOR).to_string(), REQUEST_ID_FLOOR.to_string());
}