use serde::{Deserialize, Serialize};
use crate::common::enums::BybitProductType;
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BybitList<T> {
pub list: Vec<T>,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BybitCursorList<T> {
pub list: Vec<T>,
pub next_page_cursor: Option<String>,
#[serde(default)]
pub category: Option<BybitProductType>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LeverageFilter {
pub min_leverage: String,
pub max_leverage: String,
pub leverage_step: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LinearPriceFilter {
pub min_price: String,
pub max_price: String,
pub tick_size: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SpotPriceFilter {
pub tick_size: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SpotLotSizeFilter {
pub base_precision: String,
pub quote_precision: String,
pub min_order_qty: String,
pub max_order_qty: String,
pub min_order_amt: String,
pub max_order_amt: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LinearLotSizeFilter {
pub max_order_qty: String,
pub min_order_qty: String,
pub qty_step: String,
#[serde(default)]
pub post_only_max_order_qty: Option<String>,
#[serde(default)]
pub max_mkt_order_qty: Option<String>,
#[serde(default)]
pub min_notional_value: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct OptionLotSizeFilter {
pub max_order_qty: String,
pub min_order_qty: String,
pub qty_step: String,
}
pub trait BybitResponseCheck {
fn ret_code(&self) -> i64;
fn ret_msg(&self) -> &str;
}
#[derive(Clone, Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BybitErrorCheck {
pub ret_code: i64,
pub ret_msg: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BybitResponse<T> {
pub ret_code: i64,
pub ret_msg: String,
pub result: T,
#[serde(default)]
pub ret_ext_info: Option<serde_json::Value>,
#[serde(default)]
pub time: Option<i64>,
}
impl<T> BybitResponseCheck for BybitResponse<T> {
fn ret_code(&self) -> i64 {
self.ret_code
}
fn ret_msg(&self) -> &str {
&self.ret_msg
}
}
pub type BybitListResponse<T> = BybitResponse<BybitList<T>>;
pub type BybitCursorListResponse<T> = BybitResponse<BybitCursorList<T>>;