1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//! Lib for sending requests to and processing responses from Interactive Broker's Trader Workstation or IB Gateway
//!
//! For usage of this library, please see the example implementation in [src/examples/test_helpers/manual_tests.rs](https://github.com/sparkstartconsulting/IBKR-API-Rust/blob/fix_docs_add_tests/src/examples/test_helpers/manual_tests.rs)
//!
//! The main structs and traits that clients will use are [**EClient**](https://github.com/sparkstartconsulting/IBKR-API-Rust/blob/fix_docs_add_tests/src/core/client.rs) , a struct that is responsible for
//! connecting to TWS or IB Gateway and sending requests,  and [**Wrapper**](https://github.com/sparkstartconsulting/IBKR-API-Rust/blob/fix_docs_add_tests/src/core/wrapper.rs), a trait that clients will implement that declares callback functions
//! that get called when the application receives messages from the server.
//!
//! In the example below, TWS will send the next valid order ID when the sample application connects.  This will cause the ***Wrapper*** callback method
//! ***next_valid_id*** to be called, which will start sending test requests to TWS (see the
//! ***start_requests*** method in ***TestWrapper*** which is called by ***next_valid_id***).
//!
//! ```no_run        
//! use twsapi::core::errors::IBKRApiLibError;
//! use twsapi::core::client::EClient;
//! use twsapi::core::streamer::{Streamer, TcpStreamer};
//! use std::time::Duration;
//! use twsapi::examples::test_helpers::TestWrapper;
//! use std::sync::{Arc, Mutex};
//! use std::thread;
//!
//! fn main() -> Result<(), IBKRApiLibError> {
//!
//!     let wrapper = Arc::new(Mutex::new(TestWrapper::<TcpStreamer>::new()));
//!     let app = Arc::new(Mutex::new(EClient::new(wrapper.clone())));
//!
//!     println!("getting connection...");
//!
//!     wrapper.lock().expect("Wrapper mutex was poisoned").client = Option::from(app.clone());
//!
//!    //use port 7497 for TWS or 4002 for IB Gateway, depending on the port you have set
//!    app.lock()
//!       .expect("EClient mutex was poisoned")
//!       .connect("127.0.0.1", 4002, 0)?;
//!
//!    //4002
//!    thread::sleep(Duration::new(18600, 0));
//!
//!    Ok(())
//! }
//! ```     
pub mod core;
pub mod examples;
mod tests;