Skip to main content

septoria/api/trading/
positions.rs

1use 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    /// Get all positions
22    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}