#![allow(clippy::uninlined_format_args)]
use ibapi::prelude::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
env_logger::init();
println!("Connecting to TWS...");
let client = Client::connect("127.0.0.1:7497", 100).await?;
println!("Connected successfully!");
let groups = client.display_groups().await?;
println!("Visible display groups: {:?}", groups);
let Some(&group_id) = groups.first() else {
eprintln!("No display groups visible in TWS");
return Ok(());
};
println!("\nSubscribing to group events for group {}...", group_id);
let mut subscription = client.subscribe_to_group_events(group_id).await?;
println!("Listening for events. Change the contract in TWS group {} to see updates.", group_id);
let inner = &mut *subscription;
while let Some(result) = inner.filter_data().next().await {
match result {
Ok(event) => {
println!("Received group event: {:?}", event);
println!(" Contract info: {}", event.contract_info);
}
Err(e) => {
eprintln!("Error receiving group event: {e:?}");
break;
}
}
}
Ok(())
}