webull_rs/endpoints/
orders.rs1use crate::auth::AuthManager;
2use crate::endpoints::base::BaseEndpoint;
3use crate::error::WebullResult;
4use crate::models::order::{Order, OrderQueryParams, OrderRequest, OrderResponse};
5use reqwest::Client;
6use std::sync::Arc;
7
8pub struct OrderEndpoints {
10 base: BaseEndpoint,
12}
13
14impl OrderEndpoints {
15 pub fn new(client: Client, base_url: String, auth_manager: Arc<AuthManager>) -> Self {
17 Self {
18 base: BaseEndpoint::new(client, base_url, auth_manager),
19 }
20 }
21
22 pub async fn place_order(&self, order: &OrderRequest) -> WebullResult<OrderResponse> {
24 self.base.post("/api/trade/order", order).await
25 }
26
27 pub async fn cancel_order(&self, order_id: &str) -> WebullResult<()> {
29 let path = format!("/api/trade/cancel/{}", order_id);
30 self.base.delete(&path).await
31 }
32
33 pub async fn get_order(&self, order_id: &str) -> WebullResult<Order> {
35 let path = format!("/api/trade/order/{}", order_id);
36 self.base.get(&path).await
37 }
38
39 pub async fn get_orders(&self, params: &OrderQueryParams) -> WebullResult<Vec<Order>> {
41 self.base.post("/api/trade/orders", params).await
42 }
43
44 pub async fn get_active_orders(&self) -> WebullResult<Vec<Order>> {
46 self.base.get("/api/trade/active").await
47 }
48
49 pub async fn get_filled_orders(&self) -> WebullResult<Vec<Order>> {
51 self.base.get("/api/trade/filled").await
52 }
53
54 pub async fn modify_order(&self, order_id: &str, order: &OrderRequest) -> WebullResult<OrderResponse> {
56 let path = format!("/api/trade/modify/{}", order_id);
57 self.base.put(&path, order).await
58 }
59}