septoria/api/trading/
positions.rs1use serde::{Deserialize, Serialize};
2
3use crate::api::{PaginationResponse, Requests};
4use crate::client::TradingClient;
5use crate::error::Error;
6
7mod performance;
8mod statements;
9
10#[derive(Serialize, Deserialize, Debug)]
11pub struct Position {
12 pub isin: String,
13 pub isin_title: String,
14 pub quantity: i64,
15 pub buy_price_avg: i64,
16 pub estimated_price_total: i64,
17 pub estimated_price: i64,
18}
19
20impl TradingClient {
21 pub fn get_positions(&self) -> Result<PaginationResponse<Position>, Error> {
23 const PATH: &str = "positions/";
24 let resp = self.get::<PaginationResponse<Position>>(PATH);
25 match resp {
26 Ok(r) => Ok(r),
27 Err(e) => Err(e),
28 }
29 }
30}
31
32#[cfg(test)]
33mod position_tests {
34 use crate::client::TradingClient;
35 use std::env;
36
37 #[test]
38 fn test_get_positions() {
39 dotenv::dotenv().unwrap();
40 let api_key = env::var("LEMON_MARKET_TRADING_API_KEY").unwrap();
41 let client = TradingClient::paper_client(&api_key);
42 let positions = client.get_positions().unwrap();
43 assert_eq!(positions.status.unwrap(), "ok");
44 }
45}