Skip to main content

jupiter_sdk/api/
trigger.rs

1use crate::{
2    api::TransactionRequest, common::ExecuteRes, trigger::{
3        CancelOrderReq, 
4        CancelOrderRes, 
5        CancelOrdersReq, 
6        CancelOrdersRes, 
7        CreateOrderReq, 
8        CreateOrderRes, 
9        GetTriggerOrdersReq, 
10        GetTriggerOrdersRes,
11    }, JupiterClient, JupiterError
12};
13
14
15
16
17
18#[derive(Clone)]
19pub struct TriggerService<'a>{
20    client: &'a JupiterClient,
21}
22
23
24// #[async_trait]
25impl<'a> TriggerService<'a> {
26    pub fn new(client: &'a JupiterClient) -> Self {
27        Self { client }
28    }
29
30
31    pub async fn create_order(
32        &self,
33        req: &CreateOrderReq,
34    ) -> Result<CreateOrderRes, JupiterError> {
35        let path = "/lend/v1/earn/positions";
36        self.client.get_json_with_query(&path, req).await
37    }
38
39    pub async fn execute(
40        &self,
41        req: &TransactionRequest,
42    ) -> Result<ExecuteRes, JupiterError> {
43        let path = "/trigger/v1/execute";
44        self.client.post(&path, req).await
45    }
46
47    pub async fn cancel_order(
48        &self,
49        req: &CancelOrderReq,
50    ) -> Result<CancelOrderRes, JupiterError> {
51        let path = "/trigger/v1/cancelOrder";
52        self.client.post(&path, req).await
53    }
54
55    pub async fn cancel_orders(
56        &self,
57        req: &CancelOrdersReq,
58    ) -> Result<CancelOrdersRes, JupiterError> {
59        let path = "/trigger/v1/cancelOrders";
60        self.client.post(&path, req).await
61    }
62
63    pub async fn get_trigger_orders(
64        &self,
65        req: &GetTriggerOrdersReq,
66    ) -> Result<GetTriggerOrdersRes, JupiterError> {
67        let path = "/trigger/v1/getTriggerOrders";
68        self.client.get_json_with_query(&path, req).await
69    }
70}
71
72
73
74
75#[cfg(test)]
76mod tests {
77
78    use crate::trigger::CreateOrderParams;
79
80    use super::*;
81
82    #[tokio::test]
83    async fn test_create_order() {
84        let client = JupiterClient::new(crate::JupiterConfig::default()).unwrap();
85        let trigger_service = TriggerService::new(&client);
86
87        let res = trigger_service.create_order(&CreateOrderReq {
88            input_mint: "".to_string(),
89            output_mint: "".to_string(),
90            maker: "".to_string(),
91            payer: "".to_string(),
92            params: CreateOrderParams{
93                making_amount: "".to_string(),
94                taking_amount: "".to_string(),
95                expired_at: "".to_string(),
96                slippage_bps: "".to_string(),
97                fee_bps: "".to_string(),
98            },
99            compute_unit_price: None,
100            fee_account: None,
101            wrap_and_unwrap_sol: None,
102        }).await;
103
104        match res {
105            Ok(res) => {
106                // assert_eq!(res.error_code, None);
107                println!("create_order: {}", serde_json::to_string_pretty(&res).unwrap());
108            }
109            Err(e) => {
110                panic!("create_order error: {}", e);
111            }
112        }
113    }
114}
115