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
13impl<'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 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 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