diff --git a/vehicle/vehicle.go b/vehicle/vehicle.go index 0457c7bdc..0a4c03144 100644 --- a/vehicle/vehicle.go +++ b/vehicle/vehicle.go @@ -8,7 +8,7 @@ import ( "github.com/evcc-io/evcc/util" ) -//go:generate go run ../cmd/tools/decorate.go -f decorateVehicle -b api.Vehicle -t "api.ChargeState,Status,func() (api.ChargeStatus, error)" -t "api.VehicleRange,Range,func() (int64, error)" -t "api.VehicleOdometer,Odometer,func() (float64, error)" -t "api.VehicleClimater,Climater,func() (bool, error)" -t "api.Resurrector,WakeUp,func() error" +//go:generate go run ../cmd/tools/decorate.go -f decorateVehicle -b api.Vehicle -t "api.ChargeState,Status,func() (api.ChargeStatus, error)" -t "api.VehicleRange,Range,func() (int64, error)" -t "api.VehicleOdometer,Odometer,func() (float64, error)" -t "api.VehicleClimater,Climater,func() (bool, error)" -t "api.CurrentController,MaxCurrent,func(int64) error" -t "api.Resurrector,WakeUp,func() error" // Vehicle is an api.Vehicle implementation with configurable getters and setters. type Vehicle struct { @@ -23,13 +23,14 @@ func init() { // NewConfigurableFromConfig creates a new Vehicle func NewConfigurableFromConfig(other map[string]interface{}) (api.Vehicle, error) { var cc struct { - embed `mapstructure:",squash"` - Soc provider.Config - Status *provider.Config - Range *provider.Config - Odometer *provider.Config - Climater *provider.Config - Wakeup *provider.Config + embed `mapstructure:",squash"` + Soc provider.Config + Status *provider.Config + Range *provider.Config + Odometer *provider.Config + Climater *provider.Config + MaxCurrent *provider.Config + Wakeup *provider.Config } if err := util.DecodeOther(other, &cc); err != nil { @@ -92,6 +93,16 @@ func NewConfigurableFromConfig(other map[string]interface{}) (api.Vehicle, error climater = climateG } + // decorate maxCurrent + var maxCurrent func(int64) error + if cc.MaxCurrent != nil { + maxCurrentS, err := provider.NewIntSetterFromConfig("maxCurrent", *cc.MaxCurrent) + if err != nil { + return nil, fmt.Errorf("maxCurrent: %w", err) + } + maxCurrent = maxCurrentS + } + // decorate wakeup var wakeup func() error if cc.Wakeup != nil { @@ -104,7 +115,7 @@ func NewConfigurableFromConfig(other map[string]interface{}) (api.Vehicle, error } } - return decorateVehicle(v, status, rng, odo, climater, wakeup), nil + return decorateVehicle(v, status, rng, odo, climater, maxCurrent, wakeup), nil } // Soc implements the api.Vehicle interface diff --git a/vehicle/vehicle_decorators.go b/vehicle/vehicle_decorators.go index 4724fdd71..b302ace68 100644 --- a/vehicle/vehicle_decorators.go +++ b/vehicle/vehicle_decorators.go @@ -6,12 +6,12 @@ import ( "github.com/evcc-io/evcc/api" ) -func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, error), vehicleRange func() (int64, error), vehicleOdometer func() (float64, error), vehicleClimater func() (bool, error), resurrector func() error) api.Vehicle { +func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, error), vehicleRange func() (int64, error), vehicleOdometer func() (float64, error), vehicleClimater func() (bool, error), currentController func(int64) error, resurrector func() error) api.Vehicle { switch { - case chargeState == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: return base - case chargeState != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -22,7 +22,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleRange @@ -33,7 +33,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -48,7 +48,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.VehicleOdometer @@ -59,7 +59,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -74,7 +74,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleOdometer @@ -89,7 +89,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -108,7 +108,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.VehicleClimater @@ -119,7 +119,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -134,7 +134,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleClimater @@ -149,7 +149,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -168,7 +168,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.VehicleClimater @@ -183,7 +183,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -202,7 +202,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.VehicleClimater @@ -221,7 +221,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -244,7 +244,311 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.CurrentController + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + } + + case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + } + + case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.CurrentController + api.VehicleRange + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.VehicleRange + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.CurrentController + api.VehicleOdometer + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.VehicleOdometer + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.CurrentController + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.CurrentController + api.VehicleClimater + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.VehicleClimater + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.CurrentController + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.CurrentController + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.CurrentController + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -255,7 +559,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -270,7 +574,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -285,7 +589,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -304,7 +608,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -319,7 +623,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -338,7 +642,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -357,7 +661,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -380,7 +684,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -395,7 +699,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -414,7 +718,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -433,7 +737,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -456,7 +760,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -475,7 +779,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -498,7 +802,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -521,7 +825,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -547,6 +851,374 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err vehicleRange: vehicleRange, }, } + + case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.CurrentController + api.Resurrector + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + } + + case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.Resurrector + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + } + + case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.CurrentController + api.Resurrector + api.VehicleRange + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleRange + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.CurrentController + api.Resurrector + api.VehicleOdometer + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleOdometer + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.CurrentController + api.Resurrector + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.CurrentController + api.Resurrector + api.VehicleClimater + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleClimater + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } } return nil @@ -560,6 +1232,14 @@ func (impl *decorateVehicleChargeStateImpl) Status() (api.ChargeStatus, error) { return impl.chargeState() } +type decorateVehicleCurrentControllerImpl struct { + currentController func(int64) error +} + +func (impl *decorateVehicleCurrentControllerImpl) MaxCurrent(p0 int64) error { + return impl.currentController(p0) +} + type decorateVehicleResurrectorImpl struct { resurrector func() error }