use crate::shared::{OrderBookId, PubkeyStr, Resolution};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PriceCandle {
pub t: i64,
#[serde(default)]
pub m: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub o: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub h: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub l: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub c: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub v: Option<String>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct PriceHistorySnapshot {
pub orderbook_id: OrderBookId,
pub resolution: Resolution,
pub prices: Vec<PriceCandle>,
#[serde(default)]
pub last_timestamp: Option<i64>,
#[serde(default)]
pub server_time: Option<u64>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct PriceHistoryUpdate {
pub orderbook_id: OrderBookId,
pub resolution: Resolution,
pub t: i64,
#[serde(default)]
pub m: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub o: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub h: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub l: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub c: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub v: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub bb: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ba: Option<String>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct PriceHistoryHeartbeat {
pub server_time: u64,
#[serde(default)]
pub last_processed: Option<u64>,
}
#[derive(Deserialize, Debug, Clone)]
#[serde(tag = "event_type")]
pub enum PriceHistory {
#[serde(rename = "snapshot")]
Snapshot(PriceHistorySnapshot),
#[serde(rename = "update")]
Update(PriceHistoryUpdate),
#[serde(rename = "heartbeat")]
Heartbeat(PriceHistoryHeartbeat),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DepositTokenCandle {
pub t: i64,
pub tc: i64,
pub c: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DepositPriceSnapshot {
pub deposit_asset: PubkeyStr,
pub resolution: Resolution,
pub prices: Vec<DepositTokenCandle>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DepositPriceCandleUpdate {
pub deposit_asset: PubkeyStr,
pub resolution: Resolution,
pub t: i64,
pub tc: i64,
pub c: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DepositPriceTick {
pub deposit_asset: PubkeyStr,
pub price: String,
pub event_time: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "event_type")]
pub enum DepositPrice {
#[serde(rename = "snapshot")]
Snapshot(DepositPriceSnapshot),
#[serde(rename = "candle")]
Candle(DepositPriceCandleUpdate),
#[serde(rename = "price")]
Price(DepositPriceTick),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DepositAssetPricesSnapshotResponse {
pub prices: std::collections::HashMap<String, String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DepositAssetPriceSnapshot {
pub deposit_asset: String,
pub price: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DepositAssetPriceTick {
pub deposit_asset: String,
pub price: String,
pub event_time: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "event_type")]
pub enum DepositAssetPriceEvent {
#[serde(rename = "snapshot")]
Snapshot(DepositAssetPriceSnapshot),
#[serde(rename = "price")]
Price(DepositAssetPriceTick),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OrderbookPriceCandle {
pub t: i64,
#[serde(default)]
pub m: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub o: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub h: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub l: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub c: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub v: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub bb: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ba: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PriceHistoryDecimals {
pub price: u8,
pub volume: u8,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OrderbookPriceHistoryResponse {
pub orderbook_id: OrderBookId,
pub resolution: Resolution,
pub include_ohlcv: bool,
pub prices: Vec<OrderbookPriceCandle>,
pub next_cursor: Option<u64>,
pub has_more: bool,
pub decimals: PriceHistoryDecimals,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DepositPriceCandle {
pub t: i64,
pub tc: i64,
pub c: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DepositPriceHistoryResponse {
pub deposit_asset: PubkeyStr,
pub binance_symbol: String,
pub resolution: Resolution,
pub prices: Vec<DepositPriceCandle>,
pub next_cursor: Option<u64>,
pub has_more: bool,
}