use crate::{ general::{EventLog, MarketTrend, Position, Signal}, plugin::StrategyManifest, units::{Symbol, USD, Volatility}, }; use hypersdk::{Decimal, hypercore::CandleInterval}; pub type SignalStatus = Result; #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum TerminalServerMessage { // WatchList WatchListUpdated(Vec), // Positions PositionsUpdated(Vec), // Strategy StrategyUpdated(Strategy), // Signals SignalsUpdated(Vec), // Inspector Inspect(InspectTarget), // Status StatusUpdated(Status), // Logs SetLogs(Vec), AddLog(EventLog), } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum TerminalClientMessage { ExecuteCommand(String), } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct MarketItem { pub symbol: Symbol, pub price: USD, pub trend: Decimal, pub volume_24h: USD, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct MarketOverview { pub trend: MarketTrend, pub volatility: Volatility, pub pressure: f64, pub alerts: Vec, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum AlertLevel { High, Medium, Low, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct Alert { pub level: AlertLevel, pub message: String, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct Balance { pub asset: String, pub amount: f64, pub value: f64, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum InspectTarget { None, Some(Vec), } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum InspectItem { String(String), Symbol(String), USD(f64), F64(f64), } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct Status { pub feed: Mode, pub exchange: String, pub dex: String, pub latency: u16, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum Mode { Auto, Manual, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum ItemState { Running, Stopped, Error, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct Strategy { pub strategy: StrategyManifest, pub mode: Mode, pub state: ItemState, pub cooldown: CandleInterval, } impl std::fmt::Display for AlertLevel { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::High => write!(f, "H"), Self::Medium => write!(f, "M"), Self::Low => write!(f, "L"), } } } impl std::fmt::Display for Mode { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::Auto => write!(f, "\x1b[96mAUTO\x1b[0m"), Self::Manual => write!(f, "\x1b[97mMANUAL\x1b[0m"), } } } impl std::fmt::Display for ItemState { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::Running => write!(f, "\x1b[92mRUNNING\x1b[0m"), Self::Stopped => write!(f, "\x1b[90mSTOPPED\x1b[0m"), Self::Error => write!(f, "\x1b[91mERROR\x1b[0m"), } } }