Using postcard
This commit is contained in:
@@ -6,3 +6,5 @@ edition = "2024"
|
||||
[dependencies]
|
||||
serde = { workspace = true }
|
||||
hypersdk = { workspace = true }
|
||||
postcard = { workspace = true }
|
||||
tokio = { workspace = true }
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user