use crate::account::TwapSliceFill;
use crate::markets::Side;
use crate::utils::{Address, Dec};
use serde::Deserialize;
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct TwapStates {
pub dex: String,
pub user: Address,
pub states: Vec<(u64, TwapState)>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TwapState {
pub coin: String,
pub user: Address,
pub side: Side,
pub sz: Dec,
pub executed_sz: Dec,
pub executed_ntl: Dec,
pub minutes: u32,
pub reduce_only: bool,
pub randomize: bool,
pub timestamp: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TwapSliceFills {
pub user: Address,
#[serde(default)]
pub is_snapshot: bool,
#[serde(rename = "twapSliceFills")]
pub fills: Vec<TwapSliceFill>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TwapEvent {
pub time: u64,
pub state: TwapState,
pub status: TwapStatus,
#[serde(default)]
pub twap_id: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct TwapStatus {
pub status: String,
#[serde(default)]
pub description: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TwapHistory {
pub user: Address,
#[serde(default)]
pub is_snapshot: bool,
pub history: Vec<TwapEvent>,
}
#[cfg(test)]
#[path = "tests/twap.rs"]
mod tests;