#[allow(unused_imports)]
use crate::Timestamp;
#[allow(unused_imports)]
use crate::ids::*;
#[allow(unused_imports)]
use crate::models::*;
#[allow(unused_imports)]
use crate::{Client, Result};
#[allow(unused_imports)]
use reqwest::Method;
#[allow(unused_imports)]
use rust_decimal::Decimal;
#[allow(unused_imports)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateOrderBody {
#[serde(rename = "order", default, skip_serializing_if = "Option::is_none")]
pub order: Option<OrderRequest>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateOrderResponse {
#[serde(
rename = "orderCreateTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_create_transaction: Option<Transaction>,
#[serde(
rename = "orderFillTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_fill_transaction: Option<OrderFillTransaction>,
#[serde(
rename = "orderCancelTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_cancel_transaction: Option<OrderCancelTransaction>,
#[serde(
rename = "orderReissueTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_reissue_transaction: Option<Transaction>,
#[serde(
rename = "orderReissueRejectTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_reissue_reject_transaction: Option<Transaction>,
#[serde(
rename = "relatedTransactionIDs",
default,
skip_serializing_if = "Option::is_none"
)]
pub related_transaction_ids: Option<Vec<TransactionID>>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CreateOrderRejection {
#[serde(
rename = "orderRejectTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_reject_transaction: Option<Transaction>,
#[serde(
rename = "relatedTransactionIDs",
default,
skip_serializing_if = "Option::is_none"
)]
pub related_transaction_ids: Option<Vec<TransactionID>>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
#[serde(rename = "errorCode", default, skip_serializing_if = "Option::is_none")]
pub error_code: Option<String>,
#[serde(
rename = "errorMessage",
default,
skip_serializing_if = "Option::is_none"
)]
pub error_message: Option<String>,
}
impl Client {
pub async fn create_order(
&self,
account_id: &AccountID,
body: &CreateOrderBody,
) -> std::result::Result<
crate::ApiResponse<CreateOrderResponse>,
crate::OperationError<CreateOrderRejection>,
> {
let account_id_encoded = crate::client::segment(account_id.as_str());
let path = format!("/v3/accounts/{account_id_encoded}/orders");
self.execute(
Method::POST,
&path,
None::<&()>,
Some(body),
Some(crate::client::MutationAdmission::Ordinary(account_id)),
None,
)
.await
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct ListOrdersQuery {
#[serde(rename = "ids", default, skip_serializing_if = "Option::is_none")]
pub ids: Option<Vec<OrderID>>,
#[serde(rename = "state", default, skip_serializing_if = "Option::is_none")]
pub state: Option<OrderStateFilter>,
#[serde(
rename = "instrument",
default,
skip_serializing_if = "Option::is_none"
)]
pub instrument: Option<InstrumentName>,
#[serde(rename = "count", default, skip_serializing_if = "Option::is_none")]
pub count: Option<i64>,
#[serde(rename = "beforeID", default, skip_serializing_if = "Option::is_none")]
pub before_id: Option<OrderID>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ListOrdersResponse {
#[serde(rename = "orders", default, skip_serializing_if = "Option::is_none")]
pub orders: Option<Vec<Order>>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
}
impl Client {
pub async fn list_orders(
&self,
account_id: &AccountID,
query: Option<&ListOrdersQuery>,
) -> std::result::Result<
crate::ApiResponse<ListOrdersResponse>,
crate::OperationError<crate::GenericRejection>,
> {
let account_id_encoded = crate::client::segment(account_id.as_str());
let path = format!("/v3/accounts/{account_id_encoded}/orders");
self.execute(Method::GET, &path, query, None::<&()>, None, None)
.await
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ListPendingOrdersResponse {
#[serde(rename = "orders", default, skip_serializing_if = "Option::is_none")]
pub orders: Option<Vec<Order>>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
}
impl Client {
pub async fn list_pending_orders(
&self,
account_id: &AccountID,
) -> std::result::Result<
crate::ApiResponse<ListPendingOrdersResponse>,
crate::OperationError<crate::GenericRejection>,
> {
let account_id_encoded = crate::client::segment(account_id.as_str());
let path = format!("/v3/accounts/{account_id_encoded}/pendingOrders");
self.execute(Method::GET, &path, None::<&()>, None::<&()>, None, None)
.await
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct OrderDetailsResponse {
#[serde(rename = "order", default, skip_serializing_if = "Option::is_none")]
pub order: Option<Order>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
}
impl Client {
pub async fn order_details(
&self,
account_id: &AccountID,
order_specifier: &OrderSpecifier,
) -> std::result::Result<
crate::ApiResponse<OrderDetailsResponse>,
crate::OperationError<crate::GenericRejection>,
> {
let account_id_encoded = crate::client::segment(account_id.as_str());
let order_specifier_encoded = crate::client::segment(order_specifier.as_str());
let path = format!("/v3/accounts/{account_id_encoded}/orders/{order_specifier_encoded}");
self.execute(Method::GET, &path, None::<&()>, None::<&()>, None, None)
.await
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ReplaceOrderBody {
#[serde(rename = "order", default, skip_serializing_if = "Option::is_none")]
pub order: Option<OrderRequest>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ReplaceOrderResponse {
#[serde(
rename = "orderCancelTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_cancel_transaction: Option<OrderCancelTransaction>,
#[serde(
rename = "orderCreateTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_create_transaction: Option<Transaction>,
#[serde(
rename = "orderFillTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_fill_transaction: Option<OrderFillTransaction>,
#[serde(
rename = "orderReissueTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_reissue_transaction: Option<Transaction>,
#[serde(
rename = "orderReissueRejectTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_reissue_reject_transaction: Option<Transaction>,
#[serde(
rename = "replacingOrderCancelTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub replacing_order_cancel_transaction: Option<OrderCancelTransaction>,
#[serde(
rename = "relatedTransactionIDs",
default,
skip_serializing_if = "Option::is_none"
)]
pub related_transaction_ids: Option<Vec<TransactionID>>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct ReplaceOrderRejection {
#[serde(
rename = "orderRejectTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_reject_transaction: Option<Transaction>,
#[serde(
rename = "relatedTransactionIDs",
default,
skip_serializing_if = "Option::is_none"
)]
pub related_transaction_ids: Option<Vec<TransactionID>>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
#[serde(rename = "errorCode", default, skip_serializing_if = "Option::is_none")]
pub error_code: Option<String>,
#[serde(
rename = "errorMessage",
default,
skip_serializing_if = "Option::is_none"
)]
pub error_message: Option<String>,
#[serde(
rename = "orderCancelRejectTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_cancel_reject_transaction: Option<Transaction>,
}
impl Client {
pub async fn replace_order(
&self,
account_id: &AccountID,
order_specifier: &OrderSpecifier,
body: &ReplaceOrderBody,
client_request_id: Option<&ClientRequestID>,
) -> std::result::Result<
crate::ApiResponse<ReplaceOrderResponse>,
crate::OperationError<ReplaceOrderRejection>,
> {
let account_id_encoded = crate::client::segment(account_id.as_str());
let order_specifier_encoded = crate::client::segment(order_specifier.as_str());
let path = format!("/v3/accounts/{account_id_encoded}/orders/{order_specifier_encoded}");
self.execute(
Method::PUT,
&path,
None::<&()>,
Some(body),
Some(crate::client::MutationAdmission::Ordinary(account_id)),
client_request_id,
)
.await
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CancelOrderResponse {
#[serde(
rename = "orderCancelTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_cancel_transaction: Option<OrderCancelTransaction>,
#[serde(
rename = "relatedTransactionIDs",
default,
skip_serializing_if = "Option::is_none"
)]
pub related_transaction_ids: Option<Vec<TransactionID>>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CancelOrderRejection {
#[serde(
rename = "orderCancelRejectTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_cancel_reject_transaction: Option<OrderCancelRejectTransaction>,
#[serde(
rename = "relatedTransactionIDs",
default,
skip_serializing_if = "Option::is_none"
)]
pub related_transaction_ids: Option<Vec<TransactionID>>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
#[serde(rename = "errorCode", default, skip_serializing_if = "Option::is_none")]
pub error_code: Option<String>,
#[serde(
rename = "errorMessage",
default,
skip_serializing_if = "Option::is_none"
)]
pub error_message: Option<String>,
}
impl Client {
pub async fn cancel_order(
&self,
account_id: &AccountID,
order_specifier: &OrderSpecifier,
client_request_id: Option<&ClientRequestID>,
) -> std::result::Result<
crate::ApiResponse<CancelOrderResponse>,
crate::OperationError<CancelOrderRejection>,
> {
let account_id_encoded = crate::client::segment(account_id.as_str());
let order_specifier_encoded = crate::client::segment(order_specifier.as_str());
let path =
format!("/v3/accounts/{account_id_encoded}/orders/{order_specifier_encoded}/cancel");
self.execute(
Method::PUT,
&path,
None::<&()>,
None::<&()>,
Some(crate::client::MutationAdmission::Exit(account_id)),
client_request_id,
)
.await
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateOrderClientExtensionsBody {
#[serde(
rename = "clientExtensions",
default,
skip_serializing_if = "Option::is_none"
)]
pub client_extensions: Option<ClientExtensions>,
#[serde(
rename = "tradeClientExtensions",
default,
skip_serializing_if = "Option::is_none"
)]
pub trade_client_extensions: Option<ClientExtensions>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateOrderClientExtensionsResponse {
#[serde(
rename = "orderClientExtensionsModifyTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_client_extensions_modify_transaction: Option<OrderClientExtensionsModifyTransaction>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
#[serde(
rename = "relatedTransactionIDs",
default,
skip_serializing_if = "Option::is_none"
)]
pub related_transaction_ids: Option<Vec<TransactionID>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct UpdateOrderClientExtensionsRejection {
#[serde(
rename = "orderClientExtensionsModifyRejectTransaction",
default,
skip_serializing_if = "Option::is_none"
)]
pub order_client_extensions_modify_reject_transaction:
Option<OrderClientExtensionsModifyRejectTransaction>,
#[serde(
rename = "lastTransactionID",
default,
skip_serializing_if = "Option::is_none"
)]
pub last_transaction_id: Option<TransactionID>,
#[serde(
rename = "relatedTransactionIDs",
default,
skip_serializing_if = "Option::is_none"
)]
pub related_transaction_ids: Option<Vec<TransactionID>>,
#[serde(rename = "errorCode", default, skip_serializing_if = "Option::is_none")]
pub error_code: Option<String>,
#[serde(
rename = "errorMessage",
default,
skip_serializing_if = "Option::is_none"
)]
pub error_message: Option<String>,
}
impl Client {
pub async fn update_order_client_extensions(
&self,
account_id: &AccountID,
order_specifier: &OrderSpecifier,
body: &UpdateOrderClientExtensionsBody,
) -> std::result::Result<
crate::ApiResponse<UpdateOrderClientExtensionsResponse>,
crate::OperationError<UpdateOrderClientExtensionsRejection>,
> {
let account_id_encoded = crate::client::segment(account_id.as_str());
let order_specifier_encoded = crate::client::segment(order_specifier.as_str());
let path = format!(
"/v3/accounts/{account_id_encoded}/orders/{order_specifier_encoded}/clientExtensions"
);
self.execute(
Method::PUT,
&path,
None::<&()>,
Some(body),
Some(crate::client::MutationAdmission::Ordinary(account_id)),
None,
)
.await
}
}