Skip to main content

jupiter_sdk/api/
lend.rs

1use crate::{lend::{GetEarningsReq, GetEarningsRes}, models::lend::{GetPositionsReq, GetPositionsRes}, JupiterClient, JupiterError};
2
3
4
5
6
7#[derive(Clone)]
8pub struct LendService<'a>{
9    client: &'a JupiterClient,
10}
11
12
13// #[async_trait]
14impl<'a> LendService<'a> {
15    pub fn new(client: &'a JupiterClient) -> Self {
16        Self { client }
17    }
18
19
20    pub async fn get_positions(
21        &self,
22        req: &GetPositionsReq,
23    ) -> Result<GetPositionsRes, JupiterError> {
24        let path = "/lend/v1/earn/positions";
25        self.client.get_json_with_query(&path, req).await
26    }
27
28    pub async fn get_earnings(
29        &self,
30        req: &GetEarningsReq,
31    ) -> Result<GetEarningsRes, JupiterError> {
32        let path = "/lend/v1/earn/earnings";
33        self.client.get_json_with_query(&path, req).await
34    }
35}
36
37
38
39
40#[cfg(test)]
41mod tests {
42
43    use super::*;
44
45    #[tokio::test]
46    async fn test_get_positions() {
47        let client = JupiterClient::new(crate::JupiterConfig::default()).unwrap();
48        let lend_service = LendService::new(&client);
49
50        let res = lend_service.get_positions(&GetPositionsReq {
51            users: "ANAUcDCU3Jfao3mtxBdttjEH7F3Ja7SyjGBKUa9Cruc5".to_string(),
52        }).await;
53
54        match res {
55            Ok(res) => {
56                // assert_eq!(res.error_code, None);
57                println!("get_positions: {}", serde_json::to_string_pretty(&res).unwrap());
58            }
59            Err(e) => {
60                panic!("get_positions error: {}", e);
61            }
62        }
63    }
64
65
66    #[tokio::test]
67    async fn test_get_earnings() {
68        let client = JupiterClient::new(crate::JupiterConfig::default()).unwrap();
69        let lend_service = LendService::new(&client);
70
71        let res = lend_service.get_earnings(&GetEarningsReq {
72            user: "ANAUcDCU3Jfao3mtxBdttjEH7F3Ja7SyjGBKUa9Cruc5".to_string(),
73            positions: "9BEcn9aPEmhSPbPQeFGjidRiEKki46fVQDyPpSQXPA2D".to_string(),
74        }).await;
75
76        match res {
77            Ok(res) => {
78                // assert_eq!(res.error_code, None);
79                println!("get_earnings: {}", serde_json::to_string_pretty(&res).unwrap());
80            }
81            Err(e) => {
82                panic!("get_earnings error: {}", e);
83            }
84        }
85    }
86}
87