Strategy spawning and maniest

This commit is contained in:
2026-07-25 23:48:23 +02:00
parent 87e9f62c8d
commit ff5704ec88
3 changed files with 55 additions and 4 deletions
+45 -2
View File
@@ -2,10 +2,20 @@ use std::marker::PhantomData;
use pulse_wire::{
PulseWire,
plugin::{RiskEngineMessage, RiskMessage, StrategyEngineMessage, StrategyMessage},
plugin::{
RiskEngineMessage, RiskManifest, RiskMessage, StrategyEngineMessage, StrategyManifest,
StrategyMessage,
},
};
use tokio::{
fs,
io::{AsyncReadExt, AsyncWriteExt},
process::Command,
};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use crate::store::pulse_plugin;
#[derive(Debug)]
pub struct Plugin<S: PulseWire, R: PulseWire> {
pub process: tokio::process::Child,
pub _p: (PhantomData<S>, PhantomData<R>),
@@ -53,7 +63,40 @@ impl<S: PulseWire, R: PulseWire> Plugin<S, R> {
}
}
#[derive(Debug)]
pub struct StrategyPair {
pub strategy: Plugin<StrategyEngineMessage, StrategyMessage>,
pub risk: Plugin<RiskEngineMessage, RiskMessage>,
pub strategy_manifest: StrategyManifest,
pub risk_manifest: RiskManifest,
}
impl StrategyPair {
pub async fn new(strategy_id: &str, risk_id: &str) -> tokio::io::Result<Self> {
let strategy = pulse_plugin(strategy_id)?;
let risk = pulse_plugin(risk_id)?;
Ok(Self {
strategy: Plugin::new(
Command::new("bash")
.arg(strategy.join("strategy.bash"))
.current_dir(&strategy)
.spawn()?,
),
risk: Plugin::new(
Command::new("bash")
.arg(strategy.join("risk.bash"))
.current_dir(&strategy)
.spawn()?,
),
strategy_manifest: toml::from_slice(&fs::read(strategy.join("strategy.toml")).await?)
.map_err(|v| {
tokio::io::Error::new(std::io::ErrorKind::InvalidInput, v.to_string())
})?,
risk_manifest: toml::from_slice(&fs::read(risk.join("risk.toml")).await?).map_err(
|v| tokio::io::Error::new(std::io::ErrorKind::InvalidInput, v.to_string()),
)?,
})
}
}