use crate::{ general::{EngineStatus, EventLog, Signal}, strategy::StrategyManifest, }; use hypersdk::Decimal; pub type SignalStatus = Result; #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum TerminalServerMessage { // WatchList WatchListUpdated(Vec), // Configuration ConfigUpdated(EngineConfig), // Signals SignalsUpdated(Vec), // Inspector Inspect(InspectTarget), // Status StatusUpdated(EngineStatus), // 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: String, pub price: Decimal, pub trend: Decimal, pub volume_24h: Decimal, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum InspectTarget { None, Some(Vec), } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct InspectRow(pub InspectItem, pub InspectItem, pub InspectItem); #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum InspectItem { Name(String), Symbol(String), USD(Decimal), F64(Decimal), } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct EngineConfig { pub preset: String, pub strategy: StrategyManifest, pub description: Option, pub risk_per_trade: String, pub max_open_positions: u32, pub max_daily_loss: String, }