Using postcard

This commit is contained in:
2026-07-28 22:20:50 +02:00
parent 92fe70def2
commit 7968ae14af
12 changed files with 166 additions and 153 deletions
+2
View File
@@ -6,3 +6,5 @@ edition = "2024"
[dependencies]
serde = { workspace = true }
hypersdk = { workspace = true }
postcard = { workspace = true }
tokio = { workspace = true }
+5 -5
View File
@@ -1,13 +1,13 @@
use crate::units::{Direction, Symbol, USD};
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum MarketTrend {
Bullish,
Bearish,
Neutral,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum LogKind {
Info,
Warn,
@@ -15,7 +15,7 @@ pub enum LogKind {
Debug,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Signal {
pub symbol: String,
pub kind: Direction,
@@ -26,14 +26,14 @@ pub struct Signal {
pub stop_loss: USD,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct EventLog {
pub kind: LogKind,
pub name: String,
pub message: String,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Position {
pub symbol: Symbol,
pub size: f64,
+4
View File
@@ -19,3 +19,7 @@ pub mod prelude {
pub fn server_path() -> PathBuf {
PathBuf::from("/tmp/pulse-engine.sock")
}
pub fn map_postcard_err<T>(res: postcard::Result<T>) -> tokio::io::Result<T> {
res.map_err(|e| tokio::io::Error::new(std::io::ErrorKind::Other, e))
}
+17 -21
View File
@@ -1,34 +1,30 @@
use crate::{
PulseWire,
general::{EventLog, Signal},
terminal::MarketItem,
units::Direction,
};
use hypersdk::hypercore::{Candle, CandleInterval, Subscription};
use pulse_macros::pwp;
#[pwp]
#[derive(serde::Deserialize, serde::Serialize)]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct StrategyManifest {
name: String,
description: String,
author: String,
version: String,
pub name: String,
pub description: String,
pub author: String,
pub version: String,
}
#[pwp]
#[derive(serde::Deserialize, serde::Serialize)]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct RiskManifest {
name: String,
description: String,
author: String,
version: String,
pub name: String,
pub description: String,
pub author: String,
pub version: String,
max_loss: u8,
cooldown: CandleInterval,
pub max_loss: u8,
pub cooldown: CandleInterval,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum StrategyMessage {
Log(EventLog),
@@ -49,7 +45,7 @@ pub enum StrategyMessage {
Signal(StrategySignal),
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum RiskMessage {
Log(EventLog),
@@ -60,7 +56,7 @@ pub enum RiskMessage {
Reject { reason: String },
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum StrategyEngineMessage {
Initialize,
@@ -84,7 +80,7 @@ pub enum StrategyEngineMessage {
},
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum RiskEngineMessage {
Initialize,
@@ -95,7 +91,7 @@ pub enum RiskEngineMessage {
Signal(StrategySignal),
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct StrategySignal {
pub symbol: String,
pub side: Direction,
+24 -26
View File
@@ -1,13 +1,11 @@
use crate::{
PulseWire,
general::{EventLog, MarketTrend, Position, Signal},
plugin::{RiskManifest, StrategyManifest},
units::{Symbol, USD, Volatility},
};
use hypersdk::hypercore::CandleInterval;
use pulse_macros::pwp;
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum TerminalServerMessage {
// WatchList
WatchListUpdated(Vec<MarketItem>),
@@ -32,12 +30,12 @@ pub enum TerminalServerMessage {
AddLog(EventLog),
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum TerminalClientMessage {
ExecuteCommand(String),
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct MarketItem {
pub symbol: Symbol,
pub price: USD,
@@ -45,7 +43,7 @@ pub struct MarketItem {
pub volume_24h: USD,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct MarketOverview {
pub trend: MarketTrend,
pub volatility: Volatility,
@@ -53,32 +51,32 @@ pub struct MarketOverview {
pub alerts: Vec<Alert>,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum AlertLevel {
High,
Medium,
Low,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Alert {
level: AlertLevel,
message: String,
pub level: AlertLevel,
pub message: String,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Balance {
pub asset: String,
pub amount: f64,
pub value: f64,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum InspectTarget {
None,
Some(Vec<InspectItem>),
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum InspectItem {
String(String),
Symbol(String),
@@ -86,35 +84,35 @@ pub enum InspectItem {
F64(f64),
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Status {
feed: Mode,
exchange: String,
dex: String,
latency: u16,
pub feed: Mode,
pub exchange: String,
pub dex: String,
pub latency: u16,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum Mode {
Auto,
Manual,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum ItemState {
Running,
Stopped,
Error,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Strategy {
strategy: StrategyManifest,
risk: RiskManifest,
pub strategy: StrategyManifest,
pub risk: RiskManifest,
mode: Mode,
state: ItemState,
cooldown: CandleInterval,
pub mode: Mode,
pub state: ItemState,
pub cooldown: CandleInterval,
}
impl std::fmt::Display for AlertLevel {
+4 -28
View File
@@ -1,20 +1,16 @@
use pulse_macros::pwp;
use crate::PulseWire;
#[derive(Debug, Clone)]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Symbol(pub String);
#[derive(Debug, Clone, Copy)]
#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize)]
pub struct USD(pub f64);
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum Direction {
Buy,
Sell,
}
#[pwp]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum Volatility {
Low,
Medium,
@@ -37,26 +33,6 @@ impl std::fmt::Display for USD {
}
}
impl PulseWire for Symbol {
fn from_com(com: &mut Vec<u8>) -> Self {
Self(String::from_com(com))
}
fn to_com(&self) -> Vec<u8> {
self.0.to_com()
}
}
impl PulseWire for USD {
fn from_com(com: &mut Vec<u8>) -> Self {
Self(f64::from_com(com))
}
fn to_com(&self) -> Vec<u8> {
self.0.to_com()
}
}
pub fn format_f64(value: f64) -> String {
let abs = value.abs();