use crate::client::Client;
use crate::error::Error;
use nordnet_model::ids::{AccountId, OrderId};
use nordnet_model::models::orders::{ModifyOrderRequest, Order, OrderReply, PlaceOrderRequest};
impl Client {
#[doc(alias = "GET /accounts/{accid}/orders")]
pub async fn list_orders(
&self,
accid: AccountId,
deleted: Option<bool>,
) -> Result<Vec<Order>, Error> {
let path = match deleted {
Some(d) => format!("/accounts/{accid}/orders?deleted={d}"),
None => format!("/accounts/{accid}/orders"),
};
match self.get::<Vec<Order>>(&path).await {
Ok(v) => Ok(v),
Err(Error::Decode { ref body, .. }) if body.trim().is_empty() => Ok(vec![]),
Err(e) => Err(e),
}
}
#[doc(alias = "POST /accounts/{accid}/orders")]
pub async fn place_order(
&self,
accid: AccountId,
request: &PlaceOrderRequest,
) -> Result<OrderReply, Error> {
let path = format!("/accounts/{accid}/orders");
self.post_form(&path, request).await
}
#[doc(alias = "PUT /accounts/{accid}/orders/{order_id}")]
pub async fn modify_order(
&self,
accid: AccountId,
order_id: OrderId,
request: &ModifyOrderRequest,
) -> Result<OrderReply, Error> {
let path = format!("/accounts/{accid}/orders/{order_id}");
self.put_form(&path, request).await
}
#[doc(alias = "PUT /accounts/{accid}/orders/{order_id}/activate")]
pub async fn activate_order(
&self,
accid: AccountId,
order_id: OrderId,
) -> Result<Vec<OrderReply>, Error> {
let path = format!("/accounts/{accid}/orders/{order_id}/activate");
self.put_empty(&path).await
}
#[doc(alias = "DELETE /accounts/{accid}/orders/{order_id}")]
pub async fn cancel_order(
&self,
accid: AccountId,
order_id: OrderId,
) -> Result<OrderReply, Error> {
let path = format!("/accounts/{accid}/orders/{order_id}");
self.delete(&path).await
}
}