Skip to content

Commit

Permalink
cleanup error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
Wil Boayue committed Jan 3, 2025
1 parent a894b52 commit e5f57dc
Show file tree
Hide file tree
Showing 4 changed files with 10,539 additions and 9 deletions.
3 changes: 2 additions & 1 deletion examples/wsh_event_data_by_contract.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use ibapi::Client;
use time::macros::date;

// This example demonstrates requesting Wall Street Horizon event data by contract ID.

Expand All @@ -7,7 +8,7 @@ fn main() {

let client = Client::connect("127.0.0.1:4002", 100).expect("connection failed");

let contract_id = 76792991; // TSLA
let contract_id = 272093; // 76792991; // TSLA
let start_date = None;
let end_date = None;
let limit = None;
Expand Down
22 changes: 19 additions & 3 deletions examples/wsh_event_data_by_filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,29 @@ fn main() {

let client = Client::connect("127.0.0.1:4002", 100).expect("connection failed");

let filter = ""; // filter as JSON string.
let filter = r#"
{
"country": "All",
"watchlist": ["8314"],
"limit_region": 10,
"limit": 10,
"wshe_ed": "true",
"wshe_bod": "true"
}
"#;

let filter = filter.replace("\n", "").to_string();

let subscription = client
.wsh_event_data_by_filter(filter, None, None)
.wsh_event_data_by_filter(&filter, None, None)
.expect("request wsh event data failed");

for event_data in subscription {
for event_data in &subscription {
println!("{:?}", event_data);
}

// check for errors
if let Some(error) = subscription.error() {
println!("error: {}", error);
}
}
15 changes: 10 additions & 5 deletions src/wsh.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,17 @@ pub struct WshEventData {
pub data_json: String,
}

fn decode_event_data_message(message: crate::messages::ResponseMessage) -> Result<WshEventData, Error> {
match message.message_type() {
IncomingMessages::WshEventData => decoders::decode_wsh_event_data(message),
IncomingMessages::Error => Err(Error::from(message)),
_ => Err(Error::UnexpectedResponse(message)),
}
}

impl DataStream<WshEventData> for WshEventData {
fn decode(_client: &Client, message: &mut crate::messages::ResponseMessage) -> Result<WshEventData, Error> {
match message.message_type() {
IncomingMessages::WshEventData => Ok(decoders::decode_wsh_event_data(message.clone())?),
_ => Err(Error::UnexpectedResponse(message.clone())),
}
decode_event_data_message(message.clone())
}

fn cancel_message(_server_version: i32, request_id: Option<i32>, _context: &ResponseContext) -> Result<crate::messages::RequestMessage, Error> {
Expand Down Expand Up @@ -125,7 +130,7 @@ pub(super) fn wsh_event_data_by_contract(
let subscription = client.send_request(request_id, request)?;

match subscription.next() {
Some(Ok(message)) => Ok(decoders::decode_wsh_event_data(message)?),
Some(Ok(message)) => decode_event_data_message(message),
Some(Err(Error::ConnectionReset)) => wsh_event_data_by_contract(client, contract_id, start_date, end_date, limit, auto_fill),
Some(Err(e)) => Err(e),
None => Err(Error::UnexpectedEndOfStream),
Expand Down
Loading

0 comments on commit e5f57dc

Please sign in to comment.