mod combine;
mod json;
mod rtr;
mod slurm;
use serde::Deserialize;
use crate::comms::Gate;
use crate::manager::Component;
#[derive(Debug, Deserialize)]
#[serde(tag = "type")]
pub enum Unit {
#[serde(rename = "any")]
Any(combine::Any),
#[serde(rename = "rtr")]
RtrTcp(rtr::Tcp),
#[serde(rename = "rtr-tls")]
RtrTls(rtr::Tls),
#[serde(rename = "json")]
Json(json::Json),
#[serde(rename = "merge")]
Merge(combine::Merge),
#[serde(rename = "slurm")]
Slurm(slurm::LocalExceptions),
#[cfg(test)]
#[serde(skip)]
Test(crate::test::Unit),
}
impl Unit {
pub async fn run(
self, component: Component, gate: Gate
) {
let _ = match self {
Unit::Any(unit) => unit.run(component, gate).await,
Unit::RtrTcp(unit) => unit.run(component, gate).await,
Unit::RtrTls(unit) => unit.run(component, gate).await,
Unit::Json(unit) => unit.run(component, gate).await,
Unit::Merge(unit) => unit.run(component, gate).await,
Unit::Slurm(unit) => unit.run(component, gate).await,
#[cfg(test)]
Unit::Test(unit) => unit.run(component, gate).await,
};
}
}