trading212 0.2.15

A library for interacting with the Trading212 API
Documentation
use std::env;

const ACCESS_TOKEN: &'static str = "TOKEN";
#[tokio::main]
async fn main() {
    env_logger::init();
    let token = env::var(ACCESS_TOKEN)
        .expect(format!("{} not specified in environment", ACCESS_TOKEN).as_str());
    let client = trading212::Client::new(&token, trading212::Target::Live).unwrap();
    match client.get_paid_dividends(Some(50), None, None).await {
        Ok(dividends) => {
            println!("Got {} dividends", dividends.items.len());
            for dividend in dividends.items {
                println!("Ticker: {}", dividend.ticker);
                println!("Amount: {:?}", dividend.amount);
                println!("Amount in Euro: {:?}", dividend.amount_in_euro);
                println!("Paid on: {:?}", dividend.paid_on);
                println!("Quantity: {:?}", dividend.quantity);
                println!("Reference: {:?}", dividend.reference);

                // for times in exchange.working_schedules {
                //     println!("Schedules state: {:?}", times);
                // }
                println!();
            }
            println!("Next cursor {:?} dividends", dividends.next_page_path);
        }
        Err(e) => {
            println!("Failed to get exchanges: {:?}", e)
        }
    };

    // match client.get_instruments().await {
    //     Ok(instruments) => {
    //         println!("Got {} instruments", instruments.len());
    //         for instrument in instruments {
    //             println!("Instrument: {:?}", instrument.name);
    //         }
    //     }
    //     Err(e) => {
    //         println!("Failed to get instruments: {:?}", e)
    //     }
    // };

    // match client.get_all_pies().await {
    //     Ok(pies) => {
    //         println!("Got {} pies", pies.len());
    //         for pie in pies {
    //             println!("Pie: {:?}", pie.id);
    //             match client.get_pie(pie.id).await {
    //                 Ok(piedetail) => {
    //                     println!("Got pie: {:?}", piedetail.clone().settings.unwrap().name);
    //                     match client
    //                         .delete_pie(piedetail.clone().settings.unwrap().id)
    //                         .await
    //                     {
    //                         Ok(_) => {
    //                             println!(
    //                                 "Deleted pie: {:?}",
    //                                 piedetail.clone().settings.unwrap().name
    //                             );
    //                         }
    //                         Err(e) => {
    //                             println!("Failed to delete pie: {:?}", e)
    //                         }
    //                     }
    //                 }
    //                 Err(e) => {
    //                     println!("Failed to get pie: {:?}", e)
    //                 }
    //             }
    //         }
    //     }
    //     Err(e) => {
    //         println!("Failed to get pies: {:?}", e)
    //     }
    // };
    //
    // let new_pie = trading212::models::PieRequest {
    //     dividend_cash_action: trading212::models::dividend_cache_action::DividendCashAction::Reinvest,
    //     end_date: time::OffsetDateTime::now_utc(),
    //     goal: 0.0,
    //     icon: trading212::models::icon::Icon::Burger,
    //     instrument_shares: std::collections::HashMap::from([("AAPL_US_EQ".to_string(), 1.0)]),
    //     name: "Test from API".to_string(),
    // };
    // match client.create_pie(new_pie).await {
    //     Ok(pie) => {
    //         println!("Got pie: {:?}", pie.clone().settings.unwrap().name);
    //         // match client
    //         //     .delete_pie(pie.clone().settings.unwrap().id)
    //         //     .await
    //         // {
    //         //     Ok(_) => {
    //         //         println!("Deleted pie: {:?}", pie.settings.unwrap().name);
    //         //     }
    //         //     Err(e) => {
    //         //         println!("Failed to delete pie: {:?}", e)
    //         //     }
    //         // }
    //         let mut updated_pie: trading212::models::PieRequest = pie.clone().try_into().unwrap();
    //         updated_pie.name = "Updated from API".to_string();
    //         match client
    //             .update_pie(pie.clone().settings.unwrap().id, updated_pie)
    //             .await
    //         {
    //             Ok(pie2) => {
    //                 println!("Updated pie: {:?}", pie2.settings.unwrap().name);
    //             }
    //             Err(e) => {
    //                 println!("Failed to update pie: {:?}", e)
    //             }
    //         }
    //     }
    //     Err(e) => {
    //         println!("Failed to get pie: {:?}", e)
    //     }
    // }

    // match client.get_all_orders().await {
    //     Ok(orders) => {
    //         println!("Got {} orders", orders.len());
    //         for order in orders {
    //             println!("Order: {:?}", order.id);
    //         }
    //     }
    //     Err(e) => {
    //         println!("Failed to get orders: {:?}", e)
    //     }
    // };

    // match client
    //     .place_limit_order(trading212::models::LimitRequest {
    //         limit_price: Some(100.0),
    //         quantity: Some(1.0),
    //         ticker: Some("AAPL_US_EQ".to_string()),
    //         time_validity: Some(TimeValidity::Day),
    //     })
    //     .await
    // {
    //     Ok(order) => {
    //         println!("Got order: {:?}", order.id);
    //     }
    //     Err(e) => {
    //         println!("Failed to place order: {:?}", e)
    //     }
    // };
    //
    // match client
    //     .place_market_order(trading212::models::MarketRequest {
    //         quantity: Some(1.0),
    //         ticker: Some("AAPL_US_EQ".to_string()),
    //     })
    //     .await
    // {
    //     Ok(order) => {
    //         println!("Got market order: {:?}", order.id);
    //     }
    //     Err(e) => {
    //         println!("Failed to place order: {:?}", e)
    //     }
    // };
    //
    // match client
    //     .place_stop_order(trading212::models::StopRequest {
    //         stop_price: Some(100.0),
    //         quantity: Some(1.0),
    //         ticker: Some("AAPL_US_EQ".to_string()),
    //         time_validity: Some(TimeValidity::Day),
    //     })
    //     .await
    // {
    //     Ok(order) => {
    //         println!("Got stop order: {:?}", order.id);
    //     }
    //     Err(e) => {
    //         println!("Failed to place order: {:?}", e)
    //     }
    // };
    //
    // match client
    //     .place_stop_limit_order(trading212::models::StopLimitRequest {
    //         stop_price: Some(102.0),
    //         limit_price: Some(201.0),
    //         quantity: Some(1.0),
    //         ticker: Some("AAPL_US_EQ".to_string()),
    //         time_validity: Some(TimeValidity::Day),
    //     })
    //     .await
    // {
    //     Ok(order) => {
    //         println!("Got stop limit order: {:?}", order.id);
    //     }
    //     Err(e) => {
    //         println!("Failed to place order: {:?}", e)
    //     }
    // };
    //
    // match client.get_all_orders().await {
    //     Ok(orders) => {
    //         println!("Got {} orders", orders.len());
    //         for order in orders {
    //             match client.cancel_order(order.id).await {
    //                 Ok(_) => {
    //                     println!("Cancelled order: {:?}", order.id);
    //                     tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
    //                 }
    //                 Err(e) => {
    //                     println!("Failed to cancel order: {:?}", e)
    //                 }
    //             }
    //             println!("Order: {:?}", order.id);
    //         }
    //     }
    //     Err(e) => {
    //         println!("Failed to get orders: {:?}", e)
    //     }
    // };

    // match client.get_account_cash().await {
    //     Ok(cash) => {
    //         println!("Got cash: {:?}", cash);
    //     }
    //     Err(e) => {
    //         println!("Failed to get cash: {:?}", e)
    //     }
    // };
    //
    // match client.get_account_metadata().await {
    //     Ok(metadata) => {
    //         println!("Got metadata: {:?}", metadata);
    //     }
    //     Err(e) => {
    //         println!("Failed to get metadata: {:?}", e)
    //     }
    // };
    //
    // match client.get_all_open_positions().await {
    //     Ok(positions) => {
    //         println!("Got {} positions", positions.len());
    //         for position in positions {
    //             println!("Position: {:?}", position);
    //         }
    //     }
    //     Err(e) => {
    //         println!("Failed to get positions: {:?}", e)
    //     }
    // };
    //
    // match client.get_historical_orders(None, None, None).await {
    //     Ok(orders) => {
    //         println!("Got {} orders", orders.items.clone().unwrap().len());
    //         for order in orders.items.unwrap() {
    //             println!("Order: {:#?}", order);
    //         }
    //     }
    //     Err(e) => {
    //         println!("Failed to get orders: {:?}", e)
    //     }
    // };

    // match client.get_paid_dividends(None, None, None).await {
    //     Ok(dividends) => {
    //         println!("Got {} dividends", dividends.items.clone().unwrap().len());
    //         for dividend in dividends.items.unwrap() {
    //             println!("Dividend: {:#?}", dividend);
    //         }
    //     }
    //     Err(e) => {
    //         println!("Failed to get dividends: {:?}", e)
    //     }
    // };

    // match client.export_list().await {
    //     Ok(list) => {
    //         println!("Got list: {:?}", list);
    //     }
    //     Err(e) => {
    //         println!("Failed to get list: {:?}", e)
    //     }
    // };

    // match client
    //     .export_csv(trading212::models::PublicReportRequest {
    //         data_included: trading212::models::ReportDataIncluded {
    //             include_dividends: true,
    //             include_interest: false,
    //             include_orders: false,
    //             include_transactions: false,
    //         },
    //         time_from: OffsetDateTime::now_utc() - time::Duration::days(365),
    //         time_to: OffsetDateTime::now_utc(),
    //     })
    //     .await
    // {
    //     Ok(csv) => {
    //         println!("Got csv: {:?}", csv);
    //     }
    //     Err(e) => {
    //         println!("Failed to get csv: {:?}", e)
    //     }
    // };

    // match client.transaction_list(None, None).await {
    //     Ok(transactions) => {
    //         println!(
    //             "Got {} transactions",
    //             transactions.items.clone().unwrap().len()
    //         );
    //         for transaction in transactions.items.unwrap() {
    //             println!("Transaction: {:#?}", transaction);
    //         }
    //     }
    //     Err(e) => {
    //         println!("Failed to get transactions: {:?}", e)
    //     }
    // };
}