1use std::collections::BTreeMap;
4
5use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
10#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
11pub struct ObjectSummary {
12 #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
14 pub elements: BTreeMap<String, u64>,
15 #[serde(default, skip_serializing_if = "Option::is_none")]
16 pub topology: Option<ObjectTopology>,
17 #[serde(default, skip_serializing_if = "Option::is_none")]
18 pub units: Option<ObjectUnits>,
19}
20
21#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
22#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
23pub struct ObjectTopology {
24 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub connected_components: Option<u64>,
26 #[serde(default, skip_serializing_if = "Vec::is_empty")]
29 pub reference_buses: Vec<String>,
30}
31
32#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
33#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
34pub struct ObjectUnits {
35 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub power: Option<String>,
37 #[serde(default, skip_serializing_if = "Option::is_none")]
38 pub angle: Option<String>,
39 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub base_mva: Option<f64>,
41}