use serde::{Deserialize, Serialize};
use powerio::BalancedNetwork;
use powerio_dist::MulticonductorNetwork;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum ModelKind {
Balanced,
Multiconductor,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum ModelPayload {
Balanced {
balanced_network: Box<BalancedNetwork>,
},
Multiconductor {
multiconductor_network: Box<MulticonductorNetwork>,
},
}
impl ModelPayload {
pub fn balanced(net: BalancedNetwork) -> Self {
Self::Balanced {
balanced_network: Box::new(net),
}
}
pub fn multiconductor(net: MulticonductorNetwork) -> Self {
Self::Multiconductor {
multiconductor_network: Box::new(net),
}
}
pub fn kind(&self) -> ModelKind {
match self {
ModelPayload::Balanced { .. } => ModelKind::Balanced,
ModelPayload::Multiconductor { .. } => ModelKind::Multiconductor,
}
}
pub fn as_balanced(&self) -> Option<&BalancedNetwork> {
match self {
ModelPayload::Balanced { balanced_network } => Some(balanced_network),
ModelPayload::Multiconductor { .. } => None,
}
}
pub fn as_multiconductor(&self) -> Option<&MulticonductorNetwork> {
match self {
ModelPayload::Multiconductor {
multiconductor_network,
} => Some(multiconductor_network),
ModelPayload::Balanced { .. } => None,
}
}
}