1use serde::{Deserialize, Serialize};
10
11use powerio::BalancedNetwork;
12use powerio_dist::MulticonductorNetwork;
13
14#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
16#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
17#[serde(rename_all = "snake_case")]
18#[non_exhaustive]
19pub enum ModelKind {
20 Balanced,
22 Multiconductor,
24}
25
26#[derive(Clone, Debug, Serialize, Deserialize)]
35#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
36#[serde(tag = "kind", rename_all = "snake_case")]
37pub enum ModelPayload {
38 Balanced {
39 balanced_network: Box<BalancedNetwork>,
40 },
41 Multiconductor {
42 multiconductor_network: Box<MulticonductorNetwork>,
43 },
44}
45
46impl ModelPayload {
47 pub fn balanced(net: BalancedNetwork) -> Self {
48 Self::Balanced {
49 balanced_network: Box::new(net),
50 }
51 }
52
53 pub fn multiconductor(net: MulticonductorNetwork) -> Self {
54 Self::Multiconductor {
55 multiconductor_network: Box::new(net),
56 }
57 }
58
59 pub fn kind(&self) -> ModelKind {
60 match self {
61 ModelPayload::Balanced { .. } => ModelKind::Balanced,
62 ModelPayload::Multiconductor { .. } => ModelKind::Multiconductor,
63 }
64 }
65
66 pub fn as_balanced(&self) -> Option<&BalancedNetwork> {
68 match self {
69 ModelPayload::Balanced { balanced_network } => Some(balanced_network),
70 ModelPayload::Multiconductor { .. } => None,
71 }
72 }
73
74 pub fn as_multiconductor(&self) -> Option<&MulticonductorNetwork> {
76 match self {
77 ModelPayload::Multiconductor {
78 multiconductor_network,
79 } => Some(multiconductor_network),
80 ModelPayload::Balanced { .. } => None,
81 }
82 }
83}