Skip to main content

bybit/http/
common.rs

1use serde::Deserialize;
2
3use crate::{Timestamp, enums::Category, serde::empty_string_as_none};
4
5#[derive(Debug, Deserialize, PartialEq)]
6#[serde(rename_all = "camelCase")]
7pub struct Resp<T> {
8    pub ret_code: i64,
9    pub ret_msg: String,
10    pub result: T,
11    pub time: Option<Timestamp>,
12    pub ret_ext_info: Option<RetExtInfo>,
13}
14
15#[derive(Debug, Deserialize, PartialEq)]
16#[serde(rename_all = "camelCase")]
17pub struct APIErrorResponse {
18    pub ret_code: i64,
19    pub ret_msg: String,
20}
21
22#[derive(Debug, PartialEq)]
23pub struct Response<T> {
24    pub result: T,
25    pub time: Option<Timestamp>,
26    pub headers: Headers,
27    /// Per-item results for batch endpoints; `None` for all non-batch calls.
28    pub ret_ext_info: Option<RetExtInfo>,
29}
30
31#[derive(Debug, Deserialize, PartialEq)]
32#[serde(rename_all = "camelCase")]
33pub struct CursorPagination<T> {
34    pub category: Option<Category>,
35    #[serde(default, deserialize_with = "empty_string_as_none")]
36    pub next_page_cursor: Option<String>,
37    pub list: Vec<T>,
38}
39
40#[derive(Debug, Deserialize, PartialEq)]
41#[serde(rename_all = "camelCase")]
42pub struct List<T> {
43    pub list: Vec<T>,
44}
45
46#[derive(Debug, PartialEq)]
47pub struct Headers {
48    pub ret_code: Option<i32>,
49    pub trace_id: Option<String>,
50    pub time_now: Option<Timestamp>,
51    pub api_limit: Option<u64>,
52    pub api_limit_status: Option<u64>,
53    pub api_limit_reset_timestamp: Option<Timestamp>,
54}
55
56impl Headers {
57    pub fn is_ret_code_ok(&self) -> bool {
58        match self.ret_code {
59            Some(code) => code == 0,
60            None => false,
61        }
62    }
63}
64
65#[derive(Debug, Deserialize, PartialEq)]
66pub struct BatchItemResult {
67    pub code: i64,
68    pub msg: String,
69}
70
71/// Per-item status for batch trade endpoints.
72/// For all other endpoints `retExtInfo` is `{}` — the `list` defaults to empty.
73#[derive(Debug, Default, Deserialize, PartialEq)]
74pub struct RetExtInfo {
75    #[serde(default)]
76    pub list: Vec<BatchItemResult>,
77}
78
79/// Returned by position-management and other void-result endpoints whose
80/// `result` field is the empty object `{}`.
81#[derive(Debug, Deserialize, PartialEq)]
82pub struct EmptyResult {}