surge_network/network/
cgmes_roundtrip.rs1use std::collections::HashMap;
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Default, Serialize, Deserialize)]
13pub struct CgmesRoundtripData {
14 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
16 pub equivalent_injections: HashMap<String, CgmesEquivalentInjectionSource>,
17 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
19 pub external_network_injections: HashMap<String, CgmesExternalNetworkInjectionSource>,
20 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
22 pub dangling_lines: HashMap<String, CgmesDanglingLineSource>,
23}
24
25impl CgmesRoundtripData {
26 pub fn is_empty(&self) -> bool {
28 self.equivalent_injections.is_empty()
29 && self.external_network_injections.is_empty()
30 && self.dangling_lines.is_empty()
31 }
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct CgmesEquivalentInjectionSource {
37 pub mrid: String,
39 #[serde(default, skip_serializing_if = "Option::is_none")]
41 pub name: Option<String>,
42 pub bus: u32,
44 pub p_mw: f64,
46 pub q_mvar: f64,
48 pub in_service: bool,
50 pub control_enabled: bool,
52 pub regulation_status: bool,
54 #[serde(default, skip_serializing_if = "Option::is_none")]
56 pub target_voltage_kv: Option<f64>,
57 #[serde(default, skip_serializing_if = "Option::is_none")]
59 pub min_q_mvar: Option<f64>,
60 #[serde(default, skip_serializing_if = "Option::is_none")]
62 pub max_q_mvar: Option<f64>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
67pub struct CgmesExternalNetworkInjectionSource {
68 pub mrid: String,
70 #[serde(default, skip_serializing_if = "Option::is_none")]
72 pub name: Option<String>,
73 pub bus: u32,
75 pub p_mw: f64,
77 pub q_mvar: f64,
79 pub in_service: bool,
81 #[serde(default, skip_serializing_if = "Option::is_none")]
83 pub reference_priority: Option<u32>,
84 pub control_enabled: bool,
86 pub regulation_status: bool,
88 #[serde(default, skip_serializing_if = "Option::is_none")]
90 pub target_voltage_kv: Option<f64>,
91 #[serde(default, skip_serializing_if = "Option::is_none")]
93 pub min_q_mvar: Option<f64>,
94 #[serde(default, skip_serializing_if = "Option::is_none")]
96 pub max_q_mvar: Option<f64>,
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct CgmesDanglingLineSource {
102 pub mrid: String,
104 #[serde(default, skip_serializing_if = "Option::is_none")]
106 pub name: Option<String>,
107 pub bus: u32,
109 pub p_mw: f64,
111 pub q_mvar: f64,
113 pub in_service: bool,
115 #[serde(default, skip_serializing_if = "Option::is_none")]
117 pub r_ohm: Option<f64>,
118 #[serde(default, skip_serializing_if = "Option::is_none")]
120 pub x_ohm: Option<f64>,
121 pub g_s: f64,
123 pub b_s: f64,
125}