#[derive(Clone, Debug)]
pub struct ComponentGraphConfig {
pub(crate) allow_component_validation_failures: bool,
pub(crate) allow_unconnected_components: bool,
pub(crate) allow_unspecified_inverters: bool,
pub(crate) disable_fallback_components: bool,
pub(crate) include_phantom_loads_in_consumer_formula: bool,
pub(crate) prefer_meters_in_component_formulas: bool,
pub(crate) formula_overrides: FormulaOverrides,
}
impl Default for ComponentGraphConfig {
fn default() -> Self {
Self {
allow_component_validation_failures: false,
allow_unconnected_components: false,
allow_unspecified_inverters: false,
disable_fallback_components: false,
include_phantom_loads_in_consumer_formula: false,
prefer_meters_in_component_formulas: true,
formula_overrides: FormulaOverrides::default(),
}
}
}
impl ComponentGraphConfig {
pub(crate) fn prefer_meters_in_pv_formula(&self) -> bool {
self.formula_overrides
.prefer_meters_in_pv_formula
.unwrap_or(self.prefer_meters_in_component_formulas)
}
pub(crate) fn prefer_meters_in_battery_formula(&self) -> bool {
self.formula_overrides
.prefer_meters_in_battery_formula
.unwrap_or(self.prefer_meters_in_component_formulas)
}
pub(crate) fn prefer_meters_in_chp_formula(&self) -> bool {
self.formula_overrides
.prefer_meters_in_chp_formula
.unwrap_or(self.prefer_meters_in_component_formulas)
}
pub(crate) fn prefer_meters_in_ev_charger_formula(&self) -> bool {
self.formula_overrides
.prefer_meters_in_ev_charger_formula
.unwrap_or(self.prefer_meters_in_component_formulas)
}
pub(crate) fn prefer_meters_in_wind_turbine_formula(&self) -> bool {
self.formula_overrides
.prefer_meters_in_wind_turbine_formula
.unwrap_or(self.prefer_meters_in_component_formulas)
}
pub(crate) fn prefer_meters_in_steam_boiler_formula(&self) -> bool {
self.formula_overrides
.prefer_meters_in_steam_boiler_formula
.unwrap_or(self.prefer_meters_in_component_formulas)
}
pub fn builder() -> ComponentGraphConfigBuilder {
ComponentGraphConfigBuilder::new()
}
}
#[derive(Clone, Debug)]
pub struct ComponentGraphConfigBuilder {
inner: ComponentGraphConfig,
}
impl ComponentGraphConfigBuilder {
#[allow(clippy::new_without_default)]
pub fn new() -> Self {
Self {
inner: ComponentGraphConfig::default(),
}
}
pub fn allow_component_validation_failures(mut self, value: bool) -> Self {
self.inner.allow_component_validation_failures = value;
self
}
pub fn allow_unconnected_components(mut self, value: bool) -> Self {
self.inner.allow_unconnected_components = value;
self
}
pub fn allow_unspecified_inverters(mut self, value: bool) -> Self {
self.inner.allow_unspecified_inverters = value;
self
}
pub fn disable_fallback_components(mut self, value: bool) -> Self {
self.inner.disable_fallback_components = value;
self
}
pub fn include_phantom_loads_in_consumer_formula(mut self, value: bool) -> Self {
self.inner.include_phantom_loads_in_consumer_formula = value;
self
}
pub fn prefer_meters_in_component_formulas(mut self, value: bool) -> Self {
self.inner.prefer_meters_in_component_formulas = value;
self
}
pub fn formula_overrides(mut self, overrides: FormulaOverrides) -> Self {
self.inner.formula_overrides = overrides;
self
}
pub fn build(self) -> ComponentGraphConfig {
self.inner
}
}
#[derive(Clone, Default, Debug)]
pub struct FormulaOverrides {
pub(crate) prefer_meters_in_pv_formula: Option<bool>,
pub(crate) prefer_meters_in_battery_formula: Option<bool>,
pub(crate) prefer_meters_in_chp_formula: Option<bool>,
pub(crate) prefer_meters_in_ev_charger_formula: Option<bool>,
pub(crate) prefer_meters_in_wind_turbine_formula: Option<bool>,
pub(crate) prefer_meters_in_steam_boiler_formula: Option<bool>,
}
impl FormulaOverrides {
pub fn builder() -> FormulaOverridesBuilder {
FormulaOverridesBuilder::new()
}
}
#[derive(Clone, Debug)]
pub struct FormulaOverridesBuilder {
inner: FormulaOverrides,
}
impl FormulaOverridesBuilder {
#[allow(clippy::new_without_default)]
pub fn new() -> Self {
Self {
inner: FormulaOverrides::default(),
}
}
pub fn prefer_meters_in_pv_formula(mut self, value: bool) -> Self {
self.inner.prefer_meters_in_pv_formula = Some(value);
self
}
pub fn prefer_meters_in_battery_formula(mut self, value: bool) -> Self {
self.inner.prefer_meters_in_battery_formula = Some(value);
self
}
pub fn prefer_meters_in_chp_formula(mut self, value: bool) -> Self {
self.inner.prefer_meters_in_chp_formula = Some(value);
self
}
pub fn prefer_meters_in_ev_charger_formula(mut self, value: bool) -> Self {
self.inner.prefer_meters_in_ev_charger_formula = Some(value);
self
}
pub fn prefer_meters_in_wind_turbine_formula(mut self, value: bool) -> Self {
self.inner.prefer_meters_in_wind_turbine_formula = Some(value);
self
}
pub fn prefer_meters_in_steam_boiler_formula(mut self, value: bool) -> Self {
self.inner.prefer_meters_in_steam_boiler_formula = Some(value);
self
}
pub fn build(self) -> FormulaOverrides {
self.inner
}
}