diff --git a/src/component_category.rs b/src/component_category.rs index 3b5c914..2b97368 100644 --- a/src/component_category.rs +++ b/src/component_category.rs @@ -12,7 +12,7 @@ use std::fmt::Display; #[derive(Clone, Copy, Debug, PartialEq)] pub enum InverterType { Unspecified, - Solar, + Pv, Battery, Hybrid, } @@ -21,7 +21,7 @@ impl Display for InverterType { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { InverterType::Unspecified => write!(f, "Unspecified"), - InverterType::Solar => write!(f, "Solar"), + InverterType::Pv => write!(f, "Pv"), InverterType::Battery => write!(f, "Battery"), InverterType::Hybrid => write!(f, "Hybrid"), } @@ -74,27 +74,31 @@ impl Display for EvChargerType { #[derive(Clone, Copy, Debug, PartialEq)] pub enum ComponentCategory { Unspecified, - Grid, + GridConnectionPoint, Meter, - Battery(BatteryType), Inverter(InverterType), - EvCharger(EvChargerType), Converter, - CryptoMiner, - Electrolyzer, - Chp, + Battery(BatteryType), + EvCharger(EvChargerType), + Breaker, Precharger, - Fuse, - VoltageTransformer, + Chp, + Electrolyzer, + PowerTransformer, Hvac, - Relay, + Plc, + CryptoMiner, + StaticTransferSwitch, + UninterruptiblePowerSupply, + CapacitorBank, + WindTurbine, } impl Display for ComponentCategory { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { ComponentCategory::Unspecified => write!(f, "Unspecified"), - ComponentCategory::Grid => write!(f, "Grid"), + ComponentCategory::GridConnectionPoint => write!(f, "GridConnectionPoint"), ComponentCategory::Meter => write!(f, "Meter"), ComponentCategory::Battery(battery_type) => write!(f, "Battery({battery_type})"), ComponentCategory::Inverter(inverter_type) => write!(f, "{inverter_type}Inverter"), @@ -106,10 +110,16 @@ impl Display for ComponentCategory { ComponentCategory::Electrolyzer => write!(f, "Electrolyzer"), ComponentCategory::Chp => write!(f, "CHP"), ComponentCategory::Precharger => write!(f, "Precharger"), - ComponentCategory::Fuse => write!(f, "Fuse"), - ComponentCategory::VoltageTransformer => write!(f, "VoltageTransformer"), ComponentCategory::Hvac => write!(f, "HVAC"), - ComponentCategory::Relay => write!(f, "Relay"), + ComponentCategory::Breaker => write!(f, "Breaker"), + ComponentCategory::PowerTransformer => write!(f, "PowerTransformer"), + ComponentCategory::Plc => write!(f, "PLC"), + ComponentCategory::StaticTransferSwitch => write!(f, "StaticTransferSwitch"), + ComponentCategory::UninterruptiblePowerSupply => { + write!(f, "UninterruptiblePowerSupply") + } + ComponentCategory::CapacitorBank => write!(f, "CapacitorBank"), + ComponentCategory::WindTurbine => write!(f, "WindTurbine"), } } } @@ -121,7 +131,7 @@ pub(crate) trait CategoryPredicates: Node { } fn is_grid(&self) -> bool { - self.category() == ComponentCategory::Grid + self.category() == ComponentCategory::GridConnectionPoint } fn is_meter(&self) -> bool { @@ -147,7 +157,7 @@ pub(crate) trait CategoryPredicates: Node { } fn is_pv_inverter(&self) -> bool { - self.category() == ComponentCategory::Inverter(InverterType::Solar) + self.category() == ComponentCategory::Inverter(InverterType::Pv) } fn is_hybrid_inverter(&self) -> bool { diff --git a/src/graph/creation.rs b/src/graph/creation.rs index 679b1c5..2cce4f7 100644 --- a/src/graph/creation.rs +++ b/src/graph/creation.rs @@ -185,7 +185,7 @@ mod tests { .unwrap() .is_battery_inverter(&unspec_inv_config)); builder.pop_connection(); - builder.add_component(ComponentCategory::Grid); + builder.add_component(ComponentCategory::GridConnectionPoint); assert!(builder .build(None) .is_err_and(|e| e == Error::invalid_graph("Multiple grid components found."))); diff --git a/src/graph/meter_roles.rs b/src/graph/meter_roles.rs index a74e1eb..febd18e 100644 --- a/src/graph/meter_roles.rs +++ b/src/graph/meter_roles.rs @@ -99,7 +99,7 @@ mod tests { fn nodes_and_edges() -> (Vec, Vec) { let components = vec![ - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(2, ComponentCategory::Meter), TestComponent::new(3, ComponentCategory::Meter), TestComponent::new(4, ComponentCategory::Inverter(InverterType::Battery)), @@ -108,13 +108,13 @@ mod tests { TestComponent::new(7, ComponentCategory::Inverter(InverterType::Battery)), TestComponent::new(8, ComponentCategory::Battery(BatteryType::Unspecified)), TestComponent::new(9, ComponentCategory::Meter), - TestComponent::new(10, ComponentCategory::Inverter(InverterType::Solar)), - TestComponent::new(11, ComponentCategory::Inverter(InverterType::Solar)), + TestComponent::new(10, ComponentCategory::Inverter(InverterType::Pv)), + TestComponent::new(11, ComponentCategory::Inverter(InverterType::Pv)), TestComponent::new(12, ComponentCategory::Meter), TestComponent::new(13, ComponentCategory::Chp), TestComponent::new(14, ComponentCategory::Meter), TestComponent::new(15, ComponentCategory::Chp), - TestComponent::new(16, ComponentCategory::Inverter(InverterType::Solar)), + TestComponent::new(16, ComponentCategory::Inverter(InverterType::Pv)), TestComponent::new(17, ComponentCategory::Inverter(InverterType::Battery)), TestComponent::new(18, ComponentCategory::Battery(BatteryType::LiIon)), ]; @@ -177,7 +177,7 @@ mod tests { components.push(TestComponent::new(24, ComponentCategory::Meter)); components.push(TestComponent::new( 25, - ComponentCategory::Inverter(InverterType::Solar), + ComponentCategory::Inverter(InverterType::Pv), )); connections.push(TestConnection::new(20, 24)); connections.push(TestConnection::new(24, 25)); diff --git a/src/graph/retrieval.rs b/src/graph/retrieval.rs index 75c426f..18abfd6 100644 --- a/src/graph/retrieval.rs +++ b/src/graph/retrieval.rs @@ -157,7 +157,7 @@ mod tests { fn nodes_and_edges() -> (Vec, Vec) { let components = vec![ TestComponent::new(6, ComponentCategory::Meter), - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(7, ComponentCategory::Inverter(InverterType::Battery)), TestComponent::new(3, ComponentCategory::Meter), TestComponent::new(5, ComponentCategory::Battery(BatteryType::Unspecified)), @@ -186,7 +186,10 @@ mod tests { assert_eq!( graph.component(1), - Ok(&TestComponent::new(1, ComponentCategory::Grid)) + Ok(&TestComponent::new( + 1, + ComponentCategory::GridConnectionPoint + )) ); assert_eq!( graph.component(5), diff --git a/src/graph/test_utils.rs b/src/graph/test_utils.rs index 3eba31e..f64f6d7 100644 --- a/src/graph/test_utils.rs +++ b/src/graph/test_utils.rs @@ -117,7 +117,7 @@ impl ComponentGraphBuilder { /// Adds a grid component to the graph and returns its handle. pub(super) fn grid(&mut self) -> ComponentHandle { - self.add_component(ComponentCategory::Grid) + self.add_component(ComponentCategory::GridConnectionPoint) } /// Adds a meter to the graph and returns its handle. @@ -137,7 +137,7 @@ impl ComponentGraphBuilder { /// Adds a solar inverter to the graph and returns its handle. pub(super) fn solar_inverter(&mut self) -> ComponentHandle { - self.add_component(ComponentCategory::Inverter(InverterType::Solar)) + self.add_component(ComponentCategory::Inverter(InverterType::Pv)) } /// Adds an EV charger to the graph and returns its handle. diff --git a/src/graph/validation/validate_graph.rs b/src/graph/validation/validate_graph.rs index c979a55..65a2a23 100644 --- a/src/graph/validation/validate_graph.rs +++ b/src/graph/validation/validate_graph.rs @@ -91,9 +91,9 @@ mod tests { fn nodes_and_edges() -> (Vec, Vec) { let components = vec![ TestComponent::new(6, ComponentCategory::Meter), - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(7, ComponentCategory::Inverter(InverterType::Battery)), - TestComponent::new(10, ComponentCategory::Inverter(InverterType::Solar)), + TestComponent::new(10, ComponentCategory::Inverter(InverterType::Pv)), TestComponent::new(3, ComponentCategory::Meter), TestComponent::new(5, ComponentCategory::Battery(BatteryType::Unspecified)), TestComponent::new(8, ComponentCategory::Battery(BatteryType::Unspecified)), diff --git a/src/graph/validation/validate_neighbors.rs b/src/graph/validation/validate_neighbors.rs index 1dc5300..64bccaa 100644 --- a/src/graph/validation/validate_neighbors.rs +++ b/src/graph/validation/validate_neighbors.rs @@ -72,7 +72,7 @@ where self.ensure_not_leaf(inverter)?; self.ensure_on_successors(inverter, |n| n.is_battery(), "Batteries")?; } - InverterType::Solar => { + InverterType::Pv => { self.ensure_leaf(inverter)?; } InverterType::Hybrid => { @@ -161,22 +161,25 @@ mod tests { fn test_validate_root() { let config = ComponentGraphConfig::default(); let components = vec![ - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(2, ComponentCategory::Meter), ]; let connections = vec![TestConnection::new(1, 2)]; assert!(ComponentGraph::try_new(components, connections, config.clone()).is_ok()); - let components = vec![TestComponent::new(1, ComponentCategory::Grid)]; + let components = vec![TestComponent::new( + 1, + ComponentCategory::GridConnectionPoint, + )]; let connections: Vec = vec![]; assert!( ComponentGraph::try_new(components, connections, config.clone()).is_err_and(|e| { - e == Error::invalid_graph("Grid:1 must have at least one successor.") + e == Error::invalid_graph("GridConnectionPoint:1 must have at least one successor.") }), ); let components = vec![ - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(2, ComponentCategory::Meter), TestComponent::new(3, ComponentCategory::Meter), ]; @@ -188,9 +191,10 @@ mod tests { assert!( ComponentGraph::try_new(components, connections, config.clone()).is_err_and(|e| { - e == Error::invalid_graph( - "Grid:1 can't have successors with multiple predecessors. Found Meter:3.", - ) + e == Error::invalid_graph(concat!( + "GridConnectionPoint:1 can't have successors with ", + "multiple predecessors. Found Meter:3." + )) }), ); } @@ -199,7 +203,7 @@ mod tests { fn test_validate_meter() { let config = ComponentGraphConfig::default(); let components = vec![ - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(2, ComponentCategory::Meter), TestComponent::new(3, ComponentCategory::Battery(BatteryType::LiIon)), ]; @@ -217,7 +221,7 @@ r#"InvalidGraph: Multiple validation failures: fn test_validate_battery_inverter() { let config = ComponentGraphConfig::default(); let mut components = vec![ - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(2, ComponentCategory::Meter), TestComponent::new(3, ComponentCategory::Inverter(InverterType::Battery)), TestComponent::new(4, ComponentCategory::Electrolyzer), @@ -265,9 +269,9 @@ r#"InvalidGraph: Multiple validation failures: fn test_validate_pv_inverter() { let config = ComponentGraphConfig::default(); let mut components = vec![ - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(2, ComponentCategory::Meter), - TestComponent::new(3, ComponentCategory::Inverter(InverterType::Solar)), + TestComponent::new(3, ComponentCategory::Inverter(InverterType::Pv)), TestComponent::new(4, ComponentCategory::Electrolyzer), ]; let mut connections = vec![ @@ -280,7 +284,7 @@ r#"InvalidGraph: Multiple validation failures: ComponentGraph::try_new(components.clone(), connections.clone(), config.clone()) .is_err_and(|e| { e == Error::invalid_graph( - "SolarInverter:3 can't have any successors. Found Electrolyzer:4.", + "PvInverter:3 can't have any successors. Found Electrolyzer:4.", ) }), ); @@ -305,7 +309,7 @@ r#"InvalidGraph: Multiple validation failures: fn test_validate_hybrid_inverter() { let config = ComponentGraphConfig::default(); let mut components = vec![ - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(2, ComponentCategory::Meter), TestComponent::new(3, ComponentCategory::Inverter(InverterType::Hybrid)), TestComponent::new(4, ComponentCategory::Electrolyzer), @@ -346,7 +350,7 @@ r#"InvalidGraph: Multiple validation failures: fn test_validate_batteries() { let config = ComponentGraphConfig::default(); let mut components = vec![ - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(2, ComponentCategory::Meter), TestComponent::new(3, ComponentCategory::Inverter(InverterType::Battery)), TestComponent::new(4, ComponentCategory::Battery(BatteryType::NaIon)), @@ -393,7 +397,7 @@ r#"InvalidGraph: Multiple validation failures: ); let components = vec![ - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(2, ComponentCategory::Battery(BatteryType::LiIon)), ]; let connections = vec![TestConnection::new(1, 2)]; @@ -402,7 +406,7 @@ r#"InvalidGraph: Multiple validation failures: ComponentGraph::try_new(components, connections, config.clone()).is_err_and(|e| { e == Error::invalid_graph(concat!( "Battery(LiIon):2 can only have predecessors that are ", - "BatteryInverters or HybridInverters. Found Grid:1." + "BatteryInverters or HybridInverters. Found GridConnectionPoint:1." )) }), ); @@ -412,7 +416,7 @@ r#"InvalidGraph: Multiple validation failures: fn test_validate_ev_chargers() { let config = ComponentGraphConfig::default(); let mut components = vec![ - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(2, ComponentCategory::Meter), TestComponent::new(3, ComponentCategory::EvCharger(EvChargerType::Dc)), TestComponent::new(4, ComponentCategory::Electrolyzer), @@ -441,7 +445,7 @@ r#"InvalidGraph: Multiple validation failures: fn test_validate_chps() { let config = ComponentGraphConfig::default(); let mut components = vec![ - TestComponent::new(1, ComponentCategory::Grid), + TestComponent::new(1, ComponentCategory::GridConnectionPoint), TestComponent::new(2, ComponentCategory::Meter), TestComponent::new(3, ComponentCategory::Chp), TestComponent::new(4, ComponentCategory::Electrolyzer),