use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BoundaryPoint {
pub mrid: String,
pub connectivity_node_mrid: Option<String>,
pub from_end_iso_code: Option<String>,
pub to_end_iso_code: Option<String>,
pub from_end_name: Option<String>,
pub to_end_name: Option<String>,
pub from_end_name_tso: Option<String>,
pub to_end_name_tso: Option<String>,
pub is_direct_current: bool,
pub is_excluded_from_area_interchange: bool,
pub bus: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelAuthoritySet {
pub mrid: String,
pub name: String,
pub description: Option<String>,
pub members: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EquivalentNetworkData {
pub mrid: String,
pub name: String,
pub description: Option<String>,
pub region_mrid: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EquivalentBranchData {
pub mrid: String,
pub network_mrid: Option<String>,
pub r_ohm: f64,
pub x_ohm: f64,
pub r0_ohm: Option<f64>,
pub x0_ohm: Option<f64>,
pub r2_ohm: Option<f64>,
pub x2_ohm: Option<f64>,
pub from_bus: Option<u32>,
pub to_bus: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EquivalentShuntData {
pub mrid: String,
pub network_mrid: Option<String>,
pub g_s: f64,
pub b_s: f64,
pub bus: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BoundaryData {
pub boundary_points: Vec<BoundaryPoint>,
pub model_authority_sets: Vec<ModelAuthoritySet>,
pub equivalent_networks: Vec<EquivalentNetworkData>,
pub equivalent_branches: Vec<EquivalentBranchData>,
pub equivalent_shunts: Vec<EquivalentShuntData>,
}
impl BoundaryData {
pub fn is_empty(&self) -> bool {
self.boundary_points.is_empty()
&& self.model_authority_sets.is_empty()
&& self.equivalent_networks.is_empty()
&& self.equivalent_branches.is_empty()
&& self.equivalent_shunts.is_empty()
}
}