evcc-io/charger/ocpp_decorators.go
andig 94c2606797
Some checks failed
Release / Demo (push) Has been cancelled
Release / call-build-workflow (push) Has been cancelled
Release / Publish Docker :release (push) Has been cancelled
Release / Github & APT (push) Has been cancelled
Release / Hassio Addon (push) Has been cancelled
Fix docorating by promoting embedded type methods as capabilities (#28995)
2026-04-10 15:48:23 +02:00

116 lines
3 KiB
Go

package charger
// Code generated by github.com/evcc-io/evcc/cmd/tools/decorate.go. DO NOT EDIT.
import (
"reflect"
"github.com/evcc-io/evcc/api"
)
func decorateOCPP(base *OCPP, meter func() (float64, error), meterEnergy func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), currentGetter func() (float64, error), phaseSwitcher func(int) error, battery func() (float64, error)) api.Charger {
caps := make(map[reflect.Type]any)
if meter != nil {
caps[reflect.TypeFor[api.Meter]()] = &decorateOCPPMeterImpl{meter: meter}
}
if meterEnergy != nil {
caps[reflect.TypeFor[api.MeterEnergy]()] = &decorateOCPPMeterEnergyImpl{meterEnergy: meterEnergy}
}
if phaseCurrents != nil {
caps[reflect.TypeFor[api.PhaseCurrents]()] = &decorateOCPPPhaseCurrentsImpl{phaseCurrents: phaseCurrents}
}
if phaseVoltages != nil {
caps[reflect.TypeFor[api.PhaseVoltages]()] = &decorateOCPPPhaseVoltagesImpl{phaseVoltages: phaseVoltages}
}
if currentGetter != nil {
caps[reflect.TypeFor[api.CurrentGetter]()] = &decorateOCPPCurrentGetterImpl{currentGetter: currentGetter}
}
if phaseSwitcher != nil {
caps[reflect.TypeFor[api.PhaseSwitcher]()] = &decorateOCPPPhaseSwitcherImpl{phaseSwitcher: phaseSwitcher}
}
if battery != nil {
caps[reflect.TypeFor[api.Battery]()] = &decorateOCPPBatteryImpl{battery: battery}
}
if len(caps) == 0 {
return base
}
return &decorateOCPPCapable{OCPP: base, caps: caps}
}
type decorateOCPPCapable struct {
*OCPP
caps map[reflect.Type]any
}
func (d *decorateOCPPCapable) Capability(typ reflect.Type) (any, bool) {
c, ok := d.caps[typ]
if !ok && reflect.TypeOf(d).Implements(typ) {
return d, true
}
return c, ok
}
type decorateOCPPBatteryImpl struct {
battery func() (float64, error)
}
func (impl *decorateOCPPBatteryImpl) Soc() (float64, error) {
return impl.battery()
}
type decorateOCPPCurrentGetterImpl struct {
currentGetter func() (float64, error)
}
func (impl *decorateOCPPCurrentGetterImpl) GetMaxCurrent() (float64, error) {
return impl.currentGetter()
}
type decorateOCPPMeterImpl struct {
meter func() (float64, error)
}
func (impl *decorateOCPPMeterImpl) CurrentPower() (float64, error) {
return impl.meter()
}
type decorateOCPPMeterEnergyImpl struct {
meterEnergy func() (float64, error)
}
func (impl *decorateOCPPMeterEnergyImpl) TotalEnergy() (float64, error) {
return impl.meterEnergy()
}
type decorateOCPPPhaseCurrentsImpl struct {
phaseCurrents func() (float64, float64, float64, error)
}
func (impl *decorateOCPPPhaseCurrentsImpl) Currents() (float64, float64, float64, error) {
return impl.phaseCurrents()
}
type decorateOCPPPhaseSwitcherImpl struct {
phaseSwitcher func(int) error
}
func (impl *decorateOCPPPhaseSwitcherImpl) Phases1p3p(p0 int) error {
return impl.phaseSwitcher(p0)
}
type decorateOCPPPhaseVoltagesImpl struct {
phaseVoltages func() (float64, float64, float64, error)
}
func (impl *decorateOCPPPhaseVoltagesImpl) Voltages() (float64, float64, float64, error) {
return impl.phaseVoltages()
}