From f3406c7b97775d06bd9a72508fe70294e465d845 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Wed, 29 Jul 2026 06:57:25 +0200 Subject: [PATCH] Fix bug --- Cargo.lock | 2 + Cargo.toml | 2 + pulse-sdk/Cargo.toml | 3 +- pulse-sdk/src/general.rs | 2 +- pulse-sdk/src/units.rs | 2 +- src/engine/fetch.rs | 2 +- src/terminal/terminal.rs | 100 +++++++++++++++++++++------------------ 7 files changed, 62 insertions(+), 51 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eac0541..2242481 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3947,6 +3947,7 @@ version = "0.1.0-alpha.0" dependencies = [ "hypersdk", "postcard", + "rust_decimal", "serde", "tokio", ] @@ -3963,6 +3964,7 @@ dependencies = [ "pulse-sdk", "pulse-ui", "rand 0.8.7", + "rust_decimal", "serde", "serde_json", "tokio", diff --git a/Cargo.toml b/Cargo.toml index 9badfe3..c1d3ab1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ hypersdk = { workspace = true } serde = { workspace = true } anyhow = { workspace = true } postcard = { workspace = true } +rust_decimal = { workspace = true } tokio = { workspace = true, features = [ "rt-multi-thread", "macros", @@ -29,6 +30,7 @@ toml = "1.1.3" members = ["pulse-ui", "pulse-sdk"] [workspace.dependencies] +rust_decimal = { version = "1.39", features = ["serde-str"] } postcard = { version = "1.1.3", features = ["alloc"] } pulse-ui = { path = "pulse-ui", version = "0.1.0-alpha.0" } pulse-sdk = { path = "pulse-sdk", version = "0.1.0-alpha.0" } diff --git a/pulse-sdk/Cargo.toml b/pulse-sdk/Cargo.toml index f8b9607..c545d4d 100644 --- a/pulse-sdk/Cargo.toml +++ b/pulse-sdk/Cargo.toml @@ -7,4 +7,5 @@ edition = "2024" serde = { workspace = true } hypersdk = { workspace = true } postcard = { workspace = true } -tokio = { workspace = true, features = ["io-std"]} +tokio = { workspace = true, features = ["io-std"] } +rust_decimal = { workspace = true } diff --git a/pulse-sdk/src/general.rs b/pulse-sdk/src/general.rs index 93e312f..f36fc66 100644 --- a/pulse-sdk/src/general.rs +++ b/pulse-sdk/src/general.rs @@ -1,4 +1,4 @@ -use hypersdk::Decimal; +use rust_decimal::Decimal; use crate::units::{Direction, Symbol, USD}; diff --git a/pulse-sdk/src/units.rs b/pulse-sdk/src/units.rs index 9dd091f..d598482 100644 --- a/pulse-sdk/src/units.rs +++ b/pulse-sdk/src/units.rs @@ -1,4 +1,4 @@ -use hypersdk::Decimal; +use rust_decimal::Decimal; #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct Symbol(pub String); diff --git a/src/engine/fetch.rs b/src/engine/fetch.rs index 09bdf31..bbd6038 100644 --- a/src/engine/fetch.rs +++ b/src/engine/fetch.rs @@ -1,4 +1,4 @@ -use hypersdk::Decimal; +use rust_decimal::Decimal; use pulse_sdk::prelude::*; use serde_json::Value; use std::collections::HashMap; diff --git a/src/terminal/terminal.rs b/src/terminal/terminal.rs index 6224913..608d1b8 100644 --- a/src/terminal/terminal.rs +++ b/src/terminal/terminal.rs @@ -53,16 +53,22 @@ impl TerminalClient { let status = app.status.clone(); let inspect = app.inspect.clone(); - tokio::spawn(Self::run_client( - reader, - watch_list, - active_positions, - logs, - signals, - market_overview, - status, - inspect, - )); + tokio::spawn(async { + if let Err(v) = Self::run_client( + reader, + watch_list, + active_positions, + logs, + signals, + market_overview, + status, + inspect, + ) + .await + { + panic!("{v}") + } + }); app.sock = Some(self); @@ -80,55 +86,55 @@ impl TerminalClient { status: State>, inspect: State, ) -> tokio::io::Result<()> { - let mut len_buf = [0u8; size_of::()]; - reader - .read_exact(&mut len_buf) - .await - .expect("Failed to get header length"); + loop { + let mut len_buf = [0u8; size_of::()]; + reader + .read_exact(&mut len_buf) + .await + .expect("Failed to get header length"); - let len = usize::from_le_bytes(len_buf); + let len = usize::from_le_bytes(len_buf); - let mut buffer = vec![0u8; len]; + let mut buffer = vec![0u8; len]; - reader - .read_exact(&mut buffer) - .await - .expect("Failed to read socket"); + reader + .read_exact(&mut buffer) + .await + .expect("Failed to read socket"); - match map_postcard_err(postcard::from_bytes(&buffer))? { - TerminalServerMessage::WatchListUpdated(v) => { - *watch_list.lock().await = v; - } + match map_postcard_err(postcard::from_bytes(&buffer))? { + TerminalServerMessage::WatchListUpdated(v) => { + *watch_list.lock().await = v; + } - TerminalServerMessage::PositionsUpdated(v) => { - *active_positions.lock().await = v; - } + TerminalServerMessage::PositionsUpdated(v) => { + *active_positions.lock().await = v; + } - TerminalServerMessage::StrategyUpdated(v) => { - *market_overview.lock().await = Some(v); - } + TerminalServerMessage::StrategyUpdated(v) => { + *market_overview.lock().await = Some(v); + } - TerminalServerMessage::SignalsUpdated(v) => { - *signals.lock().await = v; - } + TerminalServerMessage::SignalsUpdated(v) => { + *signals.lock().await = v; + } - TerminalServerMessage::Inspect(v) => { - *inspect.lock().await = v; - } + TerminalServerMessage::Inspect(v) => { + *inspect.lock().await = v; + } - TerminalServerMessage::StatusUpdated(v) => { - *status.lock().await = Some(v); - } + TerminalServerMessage::StatusUpdated(v) => { + *status.lock().await = Some(v); + } - TerminalServerMessage::SetLogs(v) => { - *logs.lock().await = v; - } + TerminalServerMessage::SetLogs(v) => { + *logs.lock().await = v; + } - TerminalServerMessage::AddLog(v) => { - logs.lock().await.push(v); + TerminalServerMessage::AddLog(v) => { + logs.lock().await.push(v); + } } } - - Ok(()) } }