From cde2abf5f14089c00c2c70d3b3f58132df3d2cee Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sat, 25 Jul 2026 02:41:25 +0200 Subject: [PATCH] Using Option for statuses --- pulse-wire/src/terminal.rs | 2 +- src/terminal/main.rs | 43 ++++++++++++++++++++++++-------------- src/terminal/terminal.rs | 6 +++--- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/pulse-wire/src/terminal.rs b/pulse-wire/src/terminal.rs index f76fd43..3e2af62 100644 --- a/pulse-wire/src/terminal.rs +++ b/pulse-wire/src/terminal.rs @@ -19,7 +19,7 @@ pub enum TerminalServerMessage { Inspect(InspectTarget), // Status - SetStatus(Status), + StatusUpdated(Status), // Logs SetLogs(Vec), diff --git a/src/terminal/main.rs b/src/terminal/main.rs index c0d3faf..61697e0 100644 --- a/src/terminal/main.rs +++ b/src/terminal/main.rs @@ -30,12 +30,14 @@ pub struct PulseTradeApp { command: State, scroll: State>, + + market_overview: State>, + status: State>, + watch_list: State>, active_positions: State>, logs: State>, signals: State>, - market_overview: State, - status: State, inspect: State, } @@ -135,7 +137,7 @@ impl App for PulseTradeApp { ( LayoutItem::Widget(Size::Flex(1)), Box::new( - advanced_draw(&self.scroll, 2, "MARKET OVERVIEW", &self.market_overview) + advanced_option_draw(&self.scroll, 2, "MARKET OVERVIEW", &self.market_overview) .await, ), ), @@ -155,7 +157,7 @@ impl App for PulseTradeApp { ), ( LayoutItem::Widget(Size::Flex(1)), - Box::new(advanced_draw(&self.scroll, 5, "STATUS", &self.status).await), + Box::new(advanced_option_draw(&self.scroll, 5, "STATUS", &self.status).await), ), ]), ); @@ -183,18 +185,8 @@ async fn main() -> tokio::io::Result<()> { signals: ctx.use_state(Vec::new()), logs: ctx.use_state(Vec::new()), inspect: ctx.use_state(InspectTarget::None), - market_overview: ctx.use_state(MarketOverview { - trend: pulse_wire::terminal::MarketTrend::Bullish, - volatility: pulse_wire::terminal::Volatility::High, - pressure: 0.324, - alerts: Vec::new(), - }), - status: ctx.use_state(Status { - feed: pulse_wire::terminal::Feed::Connected, - exchange: "Binance".to_string(), - dex: "DEX SCREENER".to_string(), - latency: 18, - }), + market_overview: ctx.use_state(None), + status: ctx.use_state(None), }) }) .await; @@ -216,3 +208,22 @@ pub async fn advanced_draw( apply_padding(state.lock().await.get_formatted()).join("\n"), ) } + +pub async fn advanced_option_draw( + scroll: &State>, + index: usize, + title: &'static str, + state: &State>, +) -> ScrollText { + let scroll = scroll.lock().await; + + scroll.scroll( + index, + format!(" {}{title}\x1b[0m", scroll.get_selected(index)), + if let Some(state) = &*state.lock().await { + apply_padding(state.get_formatted()).join("\n") + } else { + " Loading..".to_string() + }, + ) +} diff --git a/src/terminal/terminal.rs b/src/terminal/terminal.rs index 617979d..763cae7 100644 --- a/src/terminal/terminal.rs +++ b/src/terminal/terminal.rs @@ -78,7 +78,7 @@ impl TerminalClient { } TerminalServerMessage::OverviewUpdated(v) => { - *market_overview.lock().await = v; + *market_overview.lock().await = Some(v); } TerminalServerMessage::SignalsUpdated(v) => { @@ -89,8 +89,8 @@ impl TerminalClient { *inspect.lock().await = v; } - TerminalServerMessage::SetStatus(v) => { - *status.lock().await = v; + TerminalServerMessage::StatusUpdated(v) => { + *status.lock().await = Some(v); } TerminalServerMessage::SetLogs(v) => {