use std::collections::BTreeSet;
use crate::ComponentGraph;
use crate::Edge;
use crate::Error;
use crate::Node;
mod expr;
mod fallback;
mod formula;
mod generators;
mod traversal;
use expr::Expr;
pub use formula::{AggregationFormula, CoalesceFormula, Formula};
impl<N, E> ComponentGraph<N, E>
where
N: Node,
E: Edge,
{
pub fn consumer_formula(&self) -> Result<AggregationFormula, Error> {
generators::consumer::ConsumerFormulaBuilder::try_new(self)?.build()
}
pub fn grid_formula(&self) -> Result<AggregationFormula, Error> {
generators::grid::GridFormulaBuilder::try_new(self)?.build()
}
pub fn producer_formula(&self) -> Result<AggregationFormula, Error> {
generators::producer::ProducerFormulaBuilder::try_new(self)?.build()
}
pub fn battery_formula(
&self,
battery_ids: Option<BTreeSet<u64>>,
) -> Result<AggregationFormula, Error> {
generators::battery::BatteryFormulaBuilder::try_new(self, battery_ids)?.build()
}
pub fn chp_formula(&self, chp_ids: Option<BTreeSet<u64>>) -> Result<AggregationFormula, Error> {
generators::chp::CHPFormulaBuilder::try_new(self, chp_ids)?.build()
}
pub fn pv_formula(
&self,
pv_inverter_ids: Option<BTreeSet<u64>>,
) -> Result<AggregationFormula, Error> {
generators::pv::PVFormulaBuilder::try_new(self, pv_inverter_ids)?.build()
}
pub fn wind_turbine_formula(
&self,
wind_turbine_ids: Option<BTreeSet<u64>>,
) -> Result<AggregationFormula, Error> {
generators::wind_turbine::WindTurbineFormulaBuilder::try_new(self, wind_turbine_ids)?
.build()
}
pub fn ev_charger_formula(
&self,
ev_charger_ids: Option<BTreeSet<u64>>,
) -> Result<AggregationFormula, Error> {
generators::ev_charger::EVChargerFormulaBuilder::try_new(self, ev_charger_ids)?.build()
}
pub fn component_formula(&self, component_id: u64) -> Result<AggregationFormula, Error> {
Ok(Expr::component(component_id).into())
}
pub fn grid_coalesce_formula(&self) -> Result<CoalesceFormula, Error> {
generators::grid_coalesce::GridCoalesceFormulaBuilder::try_new(self)?.build()
}
pub fn battery_ac_coalesce_formula(
&self,
battery_ids: Option<BTreeSet<u64>>,
) -> Result<CoalesceFormula, Error> {
generators::battery_ac_coalesce::BatteryAcCoalesceFormulaBuilder::try_new(
self,
battery_ids,
)?
.build()
}
pub fn pv_ac_coalesce_formula(
&self,
pv_inverter_ids: Option<BTreeSet<u64>>,
) -> Result<CoalesceFormula, Error> {
generators::pv_ac_coalesce::PVAcCoalesceFormulaBuilder::try_new(self, pv_inverter_ids)?
.build()
}
pub fn component_ac_coalesce_formula(
&self,
component_id: u64,
) -> Result<CoalesceFormula, Error> {
Ok(Expr::component(component_id).into())
}
pub fn steam_boiler_formula(
&self,
steam_boiler_ids: Option<BTreeSet<u64>>,
) -> Result<AggregationFormula, Error> {
generators::steam_boiler::SteamBoilerFormulaBuilder::try_new(self, steam_boiler_ids)?
.build()
}
}