From 629da507a426ebc02d528e34470202b2af75680f Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Mon, 5 May 2025 23:35:39 +0200 Subject: [PATCH] Bender: add maxCurrentMillis and phases1p3p (#20755) Adds support for the last gen EVSE controllers used in Mennekes Amtron 4You 500 and 4Business 700 series chargers --- charger/bender.go | 116 +- charger/bender_decorators.go | 4974 ++++++++++++++++- .../charger/{bender.yaml => bender-cc.yaml} | 18 +- templates/definition/charger/bender-icc.yaml | 27 + 4 files changed, 5064 insertions(+), 71 deletions(-) rename templates/definition/charger/{bender.yaml => bender-cc.yaml} (87%) create mode 100644 templates/definition/charger/bender-icc.yaml diff --git a/charger/bender.go b/charger/bender.go index bf9596983..33cb188f2 100644 --- a/charger/bender.go +++ b/charger/bender.go @@ -2,7 +2,7 @@ package charger // LICENSE -// Copyright (c) 2022 premultiply +// Copyright (c) 2022-2025 premultiply // This module is NOT covered by the MIT license. All rights reserved. @@ -39,21 +39,24 @@ import ( type BenderCC struct { conn *modbus.Connection current uint16 + regCurr uint16 legacy bool } const ( // all holding type registers - bendRegChargePointState = 122 // Vehicle (Control Pilot) state - bendRegPhaseEnergy = 200 // Phase energy from primary meter (Wh) - bendRegCurrents = 212 // Currents from primary meter (mA) - bendRegTotalEnergy = 218 // Total Energy from primary meter (Wh) - bendRegActivePower = 220 // Active Power from primary meter (W) - bendRegVoltages = 222 // Voltages of the ocpp meter (V) - bendRegUserID = 720 // User ID (OCPP IdTag) from the current session. Bytes 0 to 19. - bendRegEVBatteryState = 730 // EV Battery State (% 0-100) - bendRegEVCCID = 741 // ASCII representation of the Hex. Values corresponding to the EVCCID. Bytes 0 to 11. - bendRegHemsCurrentLimit = 1000 // Current limit of the HEMS module (A) + bendRegChargePointState = 122 // Vehicle (Control Pilot) state + bendRegPhaseEnergy = 200 // Phase energy from primary meter (Wh) + bendRegCurrents = 212 // Currents from primary meter (mA) + bendRegTotalEnergy = 218 // Total Energy from primary meter (Wh) + bendRegActivePower = 220 // Active Power from primary meter (W) + bendRegVoltages = 222 // Voltages of the ocpp meter (V) + bendRegUserID = 720 // User ID (OCPP IdTag) from the current session. Bytes 0 to 19. + bendRegEVBatteryState = 730 // EV Battery State (% 0-100) + bendRegEVCCID = 741 // ASCII representation of the Hex. Values corresponding to the EVCCID. Bytes 0 to 11. + bendRegHemsCurrentLimit = 1000 // HEMS Current Limit (A) + bendRegHemsCurrentLimit10 = 1001 // HEMS Current Limit 1/10 (0.1 A) + bendRegHemsPowerLimit = 1002 // HEMS Power Limit (W) bendRegFirmware = 100 // Application version number bendRegOcppCpStatus = 104 // Charge Point status according to the OCPP spec. enumaration @@ -66,6 +69,9 @@ const ( // bendRegChargingDurationLegacy = 709 // Duration since beginning of charge (Seconds) // bendRegChargedEnergy = 716 // Sum of charged energy for the current session (Wh) // bendRegChargingDuration = 718 // Duration since beginning of charge (Seconds) + + powerLimit1p uint16 = 3725 // 207V * 3p * 6A - 1W + powerLimit3p uint16 = 0xffff ) func init() { @@ -85,9 +91,9 @@ func NewBenderCCFromConfig(ctx context.Context, other map[string]interface{}) (a return NewBenderCC(ctx, cc.URI, cc.ID) } -//go:generate go tool decorate -f decorateBenderCC -b *BenderCC -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.Battery,Soc,func() (float64, error)" -t "api.Identifier,Identify,func() (string, error)" - // NewBenderCC creates BenderCC charger +// +//go:generate go tool decorate -f decorateBenderCC -b *BenderCC -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.Battery,Soc,func() (float64, error)" -t "api.Identifier,Identify,func() (string, error)" -t "api.ChargerEx,MaxCurrentMillis,func(float64) error" -t "api.PhaseSwitcher,Phases1p3p,func(int) error" -t "api.PhaseGetter,GetPhases,func() (int, error)" func NewBenderCC(ctx context.Context, uri string, id uint8) (api.Charger, error) { conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id) if err != nil { @@ -104,6 +110,7 @@ func NewBenderCC(ctx context.Context, uri string, id uint8) (api.Charger, error) wb := &BenderCC{ conn: conn, current: 6, // assume min current + regCurr: bendRegHemsCurrentLimit, } // check legacy register set @@ -112,12 +119,15 @@ func NewBenderCC(ctx context.Context, uri string, id uint8) (api.Charger, error) } var ( - currentPower func() (float64, error) - currents func() (float64, float64, float64, error) - voltages func() (float64, float64, float64, error) - totalEnergy func() (float64, error) - soc func() (float64, error) - identify func() (string, error) + currentPower func() (float64, error) + currents func() (float64, float64, float64, error) + voltages func() (float64, float64, float64, error) + totalEnergy func() (float64, error) + soc func() (float64, error) + identify func() (string, error) + maxCurrentMillis func(float64) error + phases1p3p func(int) error + getPhases func() (int, error) ) // check presence of metering @@ -143,12 +153,24 @@ func NewBenderCC(ctx context.Context, uri string, id uint8) (api.Charger, error) } } - // check rfid + // check feature mA + if _, err := wb.conn.ReadHoldingRegisters(bendRegHemsCurrentLimit10, 1); err == nil { + maxCurrentMillis = wb.maxCurrentMillis + wb.regCurr = bendRegHemsCurrentLimit10 + } + + // check feature power control/1p3p + if _, err := wb.conn.ReadHoldingRegisters(bendRegHemsPowerLimit, 1); err == nil { + phases1p3p = wb.phases1p3p + getPhases = wb.getPhases + } + + // check feature rfid if _, err := wb.identify(); err == nil { identify = wb.identify } - return decorateBenderCC(wb, currentPower, currents, voltages, totalEnergy, soc, identify), nil + return decorateBenderCC(wb, currentPower, currents, voltages, totalEnergy, soc, identify, maxCurrentMillis, phases1p3p, getPhases), nil } // Status implements the api.Charger interface @@ -172,7 +194,7 @@ func (wb *BenderCC) Status() (api.ChargeStatus, error) { // Enabled implements the api.Charger interface func (wb *BenderCC) Enabled() (bool, error) { - b, err := wb.conn.ReadHoldingRegisters(bendRegHemsCurrentLimit, 1) + b, err := wb.conn.ReadHoldingRegisters(wb.regCurr, 1) if err != nil { return false, err } @@ -187,7 +209,7 @@ func (wb *BenderCC) Enable(enable bool) error { binary.BigEndian.PutUint16(b, wb.current) } - _, err := wb.conn.WriteMultipleRegisters(bendRegHemsCurrentLimit, 1, b) + _, err := wb.conn.WriteMultipleRegisters(wb.regCurr, 1, b) return err } @@ -209,6 +231,23 @@ func (wb *BenderCC) MaxCurrent(current int64) error { return err } +// maxCurrentMillis implements the api.ChargerEx interface (Wallbe Firmware only) +func (wb *BenderCC) maxCurrentMillis(current float64) error { + if current < 6 { + return fmt.Errorf("invalid current %.5g", current) + } + + b := make([]byte, 2) + binary.BigEndian.PutUint16(b, uint16(current*10)) // 0.1A Steps + + _, err := wb.conn.WriteMultipleRegisters(bendRegHemsCurrentLimit10, 1, b) + if err == nil { + wb.current = uint16(current * 10) // 0.1A Steps + } + + return err +} + // removed: https://github.com/evcc-io/evcc/issues/13555 // var _ api.ChargeTimer = (*BenderCC)(nil) @@ -283,6 +322,34 @@ func (wb *BenderCC) voltages() (float64, float64, float64, error) { return wb.getPhaseValues(bendRegVoltages, 1) } +// phases1p3p implements the api.PhaseSwitcher interface +func (wb *BenderCC) phases1p3p(phases int) error { + b := make([]byte, 2) + binary.BigEndian.PutUint16(b, powerLimit3p) + + if phases == 1 { + binary.BigEndian.PutUint16(b, powerLimit1p) + } + + _, err := wb.conn.WriteMultipleRegisters(bendRegHemsPowerLimit, 1, b) + + return err +} + +// getPhases implements the api.PhaseGetter interface +func (wb *BenderCC) getPhases() (int, error) { + b, err := wb.conn.ReadHoldingRegisters(bendRegHemsPowerLimit, 1) + if err != nil { + return 0, err + } + + if binary.BigEndian.Uint16(b) <= powerLimit1p { + return 1, nil + } + + return 3, nil +} + // identify implements the api.Identifier interface func (wb *BenderCC) identify() (string, error) { if !wb.legacy { @@ -354,4 +421,7 @@ func (wb *BenderCC) Diagnose() { if b, err := wb.conn.ReadHoldingRegisters(bendRegUserID, 10); err == nil { fmt.Printf("\tUserID:\t%s\n", b) } + if b, err := wb.conn.ReadHoldingRegisters(wb.regCurr, 1); err == nil { + fmt.Printf("\tCurrent Limit:\t%d\n", binary.BigEndian.Uint16(b)) + } } diff --git a/charger/bender_decorators.go b/charger/bender_decorators.go index 06f8d4736..d168771fa 100644 --- a/charger/bender_decorators.go +++ b/charger/bender_decorators.go @@ -6,12 +6,12 @@ import ( "github.com/evcc-io/evcc/api" ) -func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), meterEnergy func() (float64, error), battery func() (float64, error), identifier func() (string, error)) api.Charger { +func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), meterEnergy func() (float64, error), battery func() (float64, error), identifier func() (string, error), chargerEx func(float64) error, phaseSwitcher func(int) error, phaseGetter func() (int, error)) api.Charger { switch { - case battery == nil && identifier == nil && meter == nil: + case battery == nil && chargerEx == nil && identifier == nil && meter == nil && phaseSwitcher == nil: return base - case battery == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Meter @@ -22,7 +22,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Meter @@ -37,7 +37,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Meter @@ -52,7 +52,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Meter @@ -71,7 +71,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Meter @@ -86,7 +86,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Meter @@ -105,7 +105,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Meter @@ -124,7 +124,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Meter @@ -147,7 +147,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier == nil && meter == nil: + case battery != nil && chargerEx == nil && identifier == nil && meter == nil && phaseSwitcher == nil: return &struct { *BenderCC api.Battery @@ -158,7 +158,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Battery @@ -173,7 +173,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Battery @@ -192,7 +192,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Battery @@ -211,7 +211,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Battery @@ -234,7 +234,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Battery @@ -253,7 +253,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Battery @@ -276,7 +276,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Battery @@ -299,7 +299,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Battery @@ -326,7 +326,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier != nil && meter == nil: + case battery == nil && chargerEx == nil && identifier != nil && meter == nil && phaseSwitcher == nil: return &struct { *BenderCC api.Identifier @@ -337,7 +337,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -352,7 +352,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -371,7 +371,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -390,7 +390,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -413,7 +413,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -432,7 +432,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -455,7 +455,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -478,7 +478,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -505,7 +505,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier != nil && meter == nil: + case battery != nil && chargerEx == nil && identifier != nil && meter == nil && phaseSwitcher == nil: return &struct { *BenderCC api.Battery @@ -520,7 +520,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Battery @@ -539,7 +539,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Battery @@ -562,7 +562,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Battery @@ -585,7 +585,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Battery @@ -612,7 +612,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Battery @@ -635,7 +635,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: return &struct { *BenderCC api.Battery @@ -662,7 +662,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Battery @@ -689,7 +689,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case battery != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: return &struct { *BenderCC api.Battery @@ -719,6 +719,4882 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren phaseVoltages: phaseVoltages, }, } + + case battery == nil && chargerEx != nil && identifier == nil && meter == nil && phaseSwitcher == nil: + return &struct { + *BenderCC + api.ChargerEx + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.PhaseCurrents + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter == nil && phaseSwitcher == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter == nil && phaseSwitcher == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter == nil && phaseSwitcher == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter == nil && phaseGetter == nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.PhaseSwitcher + }{ + BenderCC: base, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Meter + api.PhaseSwitcher + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Meter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Meter + api.MeterEnergy + api.PhaseSwitcher + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Meter + api.MeterEnergy + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter == nil && phaseGetter == nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.Battery + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter == nil && phaseGetter == nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.Identifier + api.PhaseSwitcher + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.PhaseSwitcher + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseSwitcher + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter == nil && phaseGetter == nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter == nil && phaseGetter == nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.ChargerEx + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter == nil && phaseGetter == nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter == nil && phaseGetter == nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter == nil && phaseGetter == nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter == nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter == nil && phaseGetter != nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Meter + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Meter + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter == nil && phaseGetter != nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.Battery + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter == nil && phaseGetter != nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.Identifier + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter == nil && phaseGetter != nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter == nil && phaseGetter != nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.ChargerEx + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter == nil && phaseGetter != nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter == nil && phaseGetter != nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter == nil && phaseGetter != nil && phaseSwitcher != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargerEx != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseGetter != nil && phaseSwitcher != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargerEx + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseGetter + api.PhaseSwitcher + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargerEx: &decorateBenderCCChargerExImpl{ + chargerEx: chargerEx, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseGetter: &decorateBenderCCPhaseGetterImpl{ + phaseGetter: phaseGetter, + }, + PhaseSwitcher: &decorateBenderCCPhaseSwitcherImpl{ + phaseSwitcher: phaseSwitcher, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } } return nil @@ -732,6 +5608,14 @@ func (impl *decorateBenderCCBatteryImpl) Soc() (float64, error) { return impl.battery() } +type decorateBenderCCChargerExImpl struct { + chargerEx func(float64) error +} + +func (impl *decorateBenderCCChargerExImpl) MaxCurrentMillis(p0 float64) error { + return impl.chargerEx(p0) +} + type decorateBenderCCIdentifierImpl struct { identifier func() (string, error) } @@ -764,6 +5648,22 @@ func (impl *decorateBenderCCPhaseCurrentsImpl) Currents() (float64, float64, flo return impl.phaseCurrents() } +type decorateBenderCCPhaseGetterImpl struct { + phaseGetter func() (int, error) +} + +func (impl *decorateBenderCCPhaseGetterImpl) GetPhases() (int, error) { + return impl.phaseGetter() +} + +type decorateBenderCCPhaseSwitcherImpl struct { + phaseSwitcher func(int) error +} + +func (impl *decorateBenderCCPhaseSwitcherImpl) Phases1p3p(p0 int) error { + return impl.phaseSwitcher(p0) +} + type decorateBenderCCPhaseVoltagesImpl struct { phaseVoltages func() (float64, float64, float64, error) } diff --git a/templates/definition/charger/bender.yaml b/templates/definition/charger/bender-cc.yaml similarity index 87% rename from templates/definition/charger/bender.yaml rename to templates/definition/charger/bender-cc.yaml index 874a8fff2..4a175fb84 100644 --- a/templates/definition/charger/bender.yaml +++ b/templates/definition/charger/bender-cc.yaml @@ -1,4 +1,5 @@ -template: bender +template: bender-cc +covers: ["bender"] products: - brand: Ampure description: @@ -18,12 +19,7 @@ products: - brand: Mennekes description: generic: AMTRON ChargeControl - - brand: Mennekes - description: - generic: AMTRON 4You 500 - - brand: Mennekes - description: - generic: AMTRON 4Business 700 + - brand: Webasto description: generic: Live @@ -61,9 +57,9 @@ requirements: en: The 'Modbus TCP Server' must be enabled. The setting 'Register Address Set' must NOT be set to 'Phoenix' or 'TQ-DM100'. Use the third selection labeled 'Ebee', 'Bender', 'MENNEKES' etc. Set 'Allow UID Disclose' to On. evcc: ["sponsorship"] params: - - name: host - - name: port - default: 502 + - name: modbus + choice: ["tcpip"] + id: 255 render: | type: bender - uri: {{ .host }}:{{ .port }} + {{- include "modbus" . }} diff --git a/templates/definition/charger/bender-icc.yaml b/templates/definition/charger/bender-icc.yaml new file mode 100644 index 000000000..519f51fce --- /dev/null +++ b/templates/definition/charger/bender-icc.yaml @@ -0,0 +1,27 @@ +template: bender-icc +products: + - brand: Bender + description: + generic: ICC1314 + - brand: Bender + description: + generic: ICC1324 + - brand: Mennekes + description: + generic: AMTRON 4You 500 + - brand: Mennekes + description: + generic: AMTRON 4Business 700 +capabilities: ["rfid", "mA", "1p3p"] +requirements: + description: + de: Die Konfigurationsoption 'Externes Energiemanagement' muss aktiviert sein. + en: The configuration option 'External Energy Management' must be enabled. + evcc: ["sponsorship"] +params: + - name: modbus + choice: ["tcpip"] + id: 1 +render: | + type: bender + {{- include "modbus" . }}