diff --git a/api/api.go b/api/api.go index 37f907e03..7ee9eae5a 100644 --- a/api/api.go +++ b/api/api.go @@ -162,10 +162,9 @@ type SocLimiter interface { TargetSoc() (float64, error) } -// VehicleChargeController allows to start/stop the charging session on the vehicle side -type VehicleChargeController interface { - StartCharge() error - StopCharge() error +// ChargeController allows to start/stop the charging session on the vehicle side +type ChargeController interface { + ChargeEnable(bool) error } // Resurrector provides wakeup calls to the vehicle with an API call or a CP interrupt from the charger diff --git a/charger/twc3.go b/charger/twc3.go index c590637d1..1ec03994c 100644 --- a/charger/twc3.go +++ b/charger/twc3.go @@ -119,17 +119,12 @@ func (c *Twc3) Enable(enable bool) error { return nil } - v, ok := c.lp.GetVehicle().(api.VehicleChargeController) + v, ok := c.lp.GetVehicle().(api.ChargeController) if !ok { return errors.New("vehicle not capable of start/stop") } - if enable { - err = v.StartCharge() - } else { - err = v.StopCharge() - } - + err = v.ChargeEnable(enable) if err == nil { c.enabled = enable } diff --git a/cmd/soc/main.go b/cmd/soc/main.go index 1c366c22c..3f436b998 100644 --- a/cmd/soc/main.go +++ b/cmd/soc/main.go @@ -72,13 +72,18 @@ func main() { switch action { case "wakeup": - vv, ok := v.(api.VehicleChargeController) - if !ok { + switch vv := v.(type) { + case api.Resurrector: + if err := vv.WakeUp(); err != nil { + log.Fatal(err) + } + case api.ChargeController: + if err := vv.ChargeEnable(true); err != nil { + log.Fatal(err) + } + default: log.Fatal("not supported:", action) } - if err := vv.StartCharge(); err != nil { - log.Fatal(err) - } case "soc": var soc float64 diff --git a/cmd/vehicle.go b/cmd/vehicle.go index ddfbefef4..a052f66ee 100644 --- a/cmd/vehicle.go +++ b/cmd/vehicle.go @@ -88,8 +88,8 @@ func runVehicle(cmd *cobra.Command, args []string) { if cmd.Flags().Lookup(flagStart).Changed { flagUsed = true - if vv, ok := v.(api.VehicleChargeController); ok { - if err := vv.StartCharge(); err != nil { + if vv, ok := v.(api.ChargeController); ok { + if err := vv.ChargeEnable(true); err != nil { log.ERROR.Println("start charge:", err) } } else { @@ -100,8 +100,8 @@ func runVehicle(cmd *cobra.Command, args []string) { if cmd.Flags().Lookup(flagStop).Changed { flagUsed = true - if vv, ok := v.(api.VehicleChargeController); ok { - if err := vv.StopCharge(); err != nil { + if vv, ok := v.(api.ChargeController); ok { + if err := vv.ChargeEnable(false); err != nil { log.ERROR.Println("stop charge:", err) } } else { diff --git a/vehicle/bmw/provider.go b/vehicle/bmw/provider.go index 2a5e5b18c..9d1dcbac6 100644 --- a/vehicle/bmw/provider.go +++ b/vehicle/bmw/provider.go @@ -102,14 +102,10 @@ func (v *Provider) WakeUp() error { return v.actionS(DOOR_LOCK) } -var _ api.VehicleChargeController = (*Provider)(nil) +var _ api.ChargeController = (*Provider)(nil) -// StartCharge implements the api.VehicleChargeController interface -func (v *Provider) StartCharge() error { - return v.actionS(CHARGE_START) -} - -// StopCharge implements the api.VehicleChargeController interface -func (v *Provider) StopCharge() error { - return v.actionS(CHARGE_STOP) +// ChargeEnable implements the api.ChargeController interface +func (v *Provider) ChargeEnable(enable bool) error { + action := map[bool]string{true: CHARGE_START, false: CHARGE_STOP} + return v.actionS(action[enable]) } diff --git a/vehicle/jlr/provider.go b/vehicle/jlr/provider.go index d1f758e22..42fb1814d 100644 --- a/vehicle/jlr/provider.go +++ b/vehicle/jlr/provider.go @@ -10,7 +10,7 @@ import ( type Provider struct { statusG func() (StatusResponse, error) positionG func() (PositionResponse, error) - actionS func(bool) error + chargeS func(bool) error } func NewProvider(api *API, vin, user string, cache time.Duration) *Provider { @@ -21,8 +21,8 @@ func NewProvider(api *API, vin, user string, cache time.Duration) *Provider { positionG: provider.Cached(func() (PositionResponse, error) { return api.Position(vin) }, cache), - actionS: func(start bool) error { - return api.ChargeAction(vin, user, start) + chargeS: func(enable bool) error { + return api.ChargeAction(vin, user, enable) }, } @@ -116,14 +116,9 @@ func (v *Provider) Position() (float64, float64, error) { return 0, 0, err } -var _ api.VehicleChargeController = (*Provider)(nil) +var _ api.ChargeController = (*Provider)(nil) -// StartCharge implements the api.VehicleChargeController interface -func (v *Provider) StartCharge() error { - return v.actionS(true) -} - -// StopCharge implements the api.VehicleChargeController interface -func (v *Provider) StopCharge() error { - return v.actionS(false) +// ChargeEnable implements the api.ChargeController interface +func (v *Provider) ChargeEnable(enable bool) error { + return v.chargeS(enable) } diff --git a/vehicle/nissan/provider.go b/vehicle/nissan/provider.go index 29f64aefc..e75d6d3b0 100644 --- a/vehicle/nissan/provider.go +++ b/vehicle/nissan/provider.go @@ -145,14 +145,10 @@ func (v *Provider) FinishTime() (time.Time, error) { return time.Time{}, err } -var _ api.VehicleChargeController = (*Provider)(nil) +var _ api.ChargeController = (*Provider)(nil) -// StartCharge implements the api.VehicleChargeController interface -func (v *Provider) StartCharge() error { - return v.action(ActionChargeStart) -} - -// StopCharge implements the api.VehicleChargeController interface -func (v *Provider) StopCharge() error { - return v.action(ActionChargeStop) +// ChargeEnable implements the api.ChargeController interface +func (v *Provider) ChargeEnable(enable bool) error { + action := map[bool]Action{true: ActionChargeStart, false: ActionChargeStop} + return v.action(action[enable]) } diff --git a/vehicle/renault/provider.go b/vehicle/renault/provider.go index c302a51a4..c861e11ef 100644 --- a/vehicle/renault/provider.go +++ b/vehicle/renault/provider.go @@ -171,16 +171,11 @@ func (v *Provider) Position() (float64, float64, error) { return 0, 0, err } -var _ api.VehicleChargeController = (*Provider)(nil) +var _ api.ChargeController = (*Provider)(nil) -// StartCharge implements the api.VehicleChargeController interface -func (v *Provider) StartCharge() error { - _, err := v.action(kamereon.ActionStart) - return err -} - -// StopCharge implements the api.VehicleChargeController interface -func (v *Provider) StopCharge() error { - _, err := v.action(kamereon.ActionStop) +// ChargeEnable implements the api.ChargeController interface +func (v *Provider) ChargeEnable(enable bool) error { + action := map[bool]string{true: kamereon.ActionStart, false: kamereon.ActionStop} + _, err := v.action(action[enable]) return err } diff --git a/vehicle/seat/cupra/provider.go b/vehicle/seat/cupra/provider.go index d5f1b2be5..eaf75bcd9 100644 --- a/vehicle/seat/cupra/provider.go +++ b/vehicle/seat/cupra/provider.go @@ -108,14 +108,10 @@ func (v *Provider) TargetSoc() (float64, error) { return float64(res.Services.Charging.TargetPct), err } -var _ api.VehicleChargeController = (*Provider)(nil) +var _ api.ChargeController = (*Provider)(nil) -// StartCharge implements the api.VehicleChargeController interface -func (v *Provider) StartCharge() error { - return v.action(ActionCharge, ActionChargeStart) -} - -// StopCharge implements the api.VehicleChargeController interface -func (v *Provider) StopCharge() error { - return v.action(ActionCharge, ActionChargeStop) +// ChargeEnable implements the api.ChargeController interface +func (v *Provider) ChargeEnable(enable bool) error { + action := map[bool]string{true: ActionChargeStart, false: ActionChargeStop} + return v.action(ActionCharge, action[enable]) } diff --git a/vehicle/skoda/provider.go b/vehicle/skoda/provider.go index eff106174..9b42ca0cc 100644 --- a/vehicle/skoda/provider.go +++ b/vehicle/skoda/provider.go @@ -137,14 +137,10 @@ func (v *Provider) TargetSoc() (float64, error) { return 0, err } -var _ api.VehicleChargeController = (*Provider)(nil) +var _ api.ChargeController = (*Provider)(nil) -// StartCharge implements the api.VehicleChargeController interface -func (v *Provider) StartCharge() error { - return v.action(ActionCharge, ActionChargeStart) -} - -// StopCharge implements the api.VehicleChargeController interface -func (v *Provider) StopCharge() error { - return v.action(ActionCharge, ActionChargeStop) +// ChargeEnable implements the api.ChargeController interface +func (v *Provider) ChargeEnable(enable bool) error { + action := map[bool]string{true: ActionChargeStart, false: ActionChargeStop} + return v.action(ActionCharge, action[enable]) } diff --git a/vehicle/tesla/api_test.go b/vehicle/tesla/api_test.go index 37ed80242..f67746925 100644 --- a/vehicle/tesla/api_test.go +++ b/vehicle/tesla/api_test.go @@ -40,5 +40,5 @@ func TestCommandResponse(t *testing.T) { v, err := client.Vehicle("abc") require.NoError(t, err) - require.ErrorIs(t, NewController(v).StartCharge(), api.ErrAsleep) + require.ErrorIs(t, NewController(v).ChargeEnable(true), api.ErrAsleep) } diff --git a/vehicle/tesla/controller.go b/vehicle/tesla/controller.go index 498a9df09..0152ca8ef 100644 --- a/vehicle/tesla/controller.go +++ b/vehicle/tesla/controller.go @@ -25,7 +25,7 @@ func NewController(vehicle *tesla.Vehicle) *Controller { var _ api.CurrentController = (*Controller)(nil) -// StartCharge implements the api.VehicleChargeController interface +// MaxCurrent implements the api.CurrentController interface func (v *Controller) MaxCurrent(current int64) error { if !sponsor.IsAuthorized() { return api.ErrSponsorRequired @@ -34,32 +34,28 @@ func (v *Controller) MaxCurrent(current int64) error { return apiError(v.vehicle.SetChargingAmps(int(current))) } -var _ api.VehicleChargeController = (*Controller)(nil) +var _ api.ChargeController = (*Controller)(nil) -// StartCharge implements the api.VehicleChargeController interface -func (v *Controller) StartCharge() error { +// ChargeEnable implements the api.ChargeController interface +func (v *Controller) ChargeEnable(enable bool) error { if !sponsor.IsAuthorized() { return api.ErrSponsorRequired } - err := apiError(v.vehicle.StartCharging()) - if err != nil && slices.Contains([]string{"complete", "is_charging"}, err.Error()) { - return nil - } - return err -} + var err error -// StopCharge implements the api.VehicleChargeController interface -func (v *Controller) StopCharge() error { - if !sponsor.IsAuthorized() { - return api.ErrSponsorRequired - } + if enable { + err = apiError(v.vehicle.StartCharging()) + if err != nil && slices.Contains([]string{"complete", "is_charging"}, err.Error()) { + return nil + } + } else { + err = apiError(v.vehicle.StopCharging()) - err := apiError(v.vehicle.StopCharging()) - - // ignore sleeping vehicle - if errors.Is(err, api.ErrAsleep) { - err = nil + // ignore sleeping vehicle + if errors.Is(err, api.ErrAsleep) { + err = nil + } } return err diff --git a/vehicle/tronity.go b/vehicle/tronity.go index dec5b9875..2000bd0ac 100644 --- a/vehicle/tronity.go +++ b/vehicle/tronity.go @@ -48,7 +48,7 @@ func init() { registry.Add("tronity", NewTronityFromConfig) } -// go:generate go run ../cmd/tools/decorate.go -f decorateTronity -b *Tronity -r api.Vehicle -t "api.ChargeState,Status,func() (api.ChargeStatus, error)" -t "api.VehicleOdometer,Odometer,func() (float64, error)" -t "api.VehicleChargeController,StartCharge,func() error" -t "api.VehicleChargeController,StopCharge,func() error" +//go:generate go run ../cmd/tools/decorate.go -f decorateTronity -b *Tronity -r api.Vehicle -t "api.ChargeState,Status,func() (api.ChargeStatus, error)" -t "api.VehicleOdometer,Odometer,func() (float64, error)" -t "api.ChargeController,ChargeEnable,func(bool) error" // NewTronityFromConfig creates a new vehicle func NewTronityFromConfig(other map[string]interface{}) (api.Vehicle, error) { @@ -131,13 +131,12 @@ func NewTronityFromConfig(other map[string]interface{}) (api.Vehicle, error) { odometer = v.odometer } - var start, stop func() error + var chargeEnable func(bool) error if slices.Contains(vehicle.Scopes, tronity.WriteChargeStartStop) { - start = v.startCharge - stop = v.stopCharge + chargeEnable = v.chargeEnable } - return decorateTronity(v, status, odometer, start, stop), nil + return decorateTronity(v, status, odometer, chargeEnable), nil } // RefreshToken performs token refresh by logging in with app context @@ -234,14 +233,9 @@ func (v *Tronity) post(uri string) error { return err } -// startCharge implements the api.VehicleChargeController interface -func (v *Tronity) startCharge() error { - uri := fmt.Sprintf("%s/tronity/vehicles/%s/start_charging", tronity.URI, v.vid) - return v.post(uri) -} - -// stopCharge implements the api.VehicleChargeController interface -func (v *Tronity) stopCharge() error { - uri := fmt.Sprintf("%s/tronity/vehicles/%s/stop_charging", tronity.URI, v.vid) +// chargeEnable implements the api.ChargeController interface +func (v *Tronity) chargeEnable(enable bool) error { + action := map[bool]string{true: "start_charging", false: "stop_charging"} + uri := fmt.Sprintf("%s/tronity/vehicles/%s/%s", tronity.URI, v.vid, action[enable]) return v.post(uri) } diff --git a/vehicle/tronity_decorators.go b/vehicle/tronity_decorators.go index 8f3e8fcb4..0b0ee6479 100644 --- a/vehicle/tronity_decorators.go +++ b/vehicle/tronity_decorators.go @@ -6,12 +6,12 @@ import ( "github.com/evcc-io/evcc/api" ) -func decorateTronity(base *Tronity, chargeState func() (api.ChargeStatus, error), vehicleOdometer func() (float64, error), vehicleStartCharge func() error, vehicleStopCharge func() error) api.Vehicle { +func decorateTronity(base *Tronity, chargeState func() (api.ChargeStatus, error), vehicleOdometer func() (float64, error), chargeController func(bool) error) api.Vehicle { switch { - case chargeState == nil && vehicleOdometer == nil && vehicleStartCharge == nil && vehicleStopCharge == nil: + case chargeController == nil && chargeState == nil && vehicleOdometer == nil: return base - case chargeState != nil && vehicleOdometer == nil && vehicleStartCharge == nil && vehicleStopCharge == nil: + case chargeController == nil && chargeState != nil && vehicleOdometer == nil: return &struct { *Tronity api.ChargeState @@ -22,7 +22,7 @@ func decorateTronity(base *Tronity, chargeState func() (api.ChargeStatus, error) }, } - case chargeState == nil && vehicleOdometer != nil && vehicleStartCharge == nil && vehicleStopCharge == nil: + case chargeController == nil && chargeState == nil && vehicleOdometer != nil: return &struct { *Tronity api.VehicleOdometer @@ -33,7 +33,7 @@ func decorateTronity(base *Tronity, chargeState func() (api.ChargeStatus, error) }, } - case chargeState != nil && vehicleOdometer != nil && vehicleStartCharge == nil && vehicleStopCharge == nil: + case chargeController == nil && chargeState != nil && vehicleOdometer != nil: return &struct { *Tronity api.ChargeState @@ -48,85 +48,78 @@ func decorateTronity(base *Tronity, chargeState func() (api.ChargeStatus, error) }, } - case chargeState == nil && vehicleOdometer == nil && vehicleStartCharge != nil && vehicleStopCharge != nil: + case chargeController != nil && chargeState == nil && vehicleOdometer == nil: return &struct { *Tronity - api.VehicleChargeController + api.ChargeController }{ Tronity: base, - VehicleChargeController: &decorateTronityVehicleChargeControllerImpl{ - vehicleStartCharge: vehicleStartCharge, + ChargeController: &decorateTronityChargeControllerImpl{ + chargeController: chargeController, }, } - case chargeState == nil && vehicleOdometer == nil && vehicleStartCharge != nil && vehicleStopCharge != nil: - return &struct { - *Tronity - api.VehicleChargeController - }{ - Tronity: base, - VehicleChargeController: &decorateTronityVehicleChargeControllerImpl{ - vehicleStartCharge: vehicleStartCharge, - vehicleStopCharge: vehicleStopCharge, - }, - } - - case chargeState != nil && vehicleOdometer == nil && vehicleStartCharge != nil && vehicleStopCharge != nil: + case chargeController != nil && chargeState != nil && vehicleOdometer == nil: return &struct { *Tronity + api.ChargeController api.ChargeState - api.VehicleChargeController }{ Tronity: base, + ChargeController: &decorateTronityChargeControllerImpl{ + chargeController: chargeController, + }, ChargeState: &decorateTronityChargeStateImpl{ chargeState: chargeState, }, - VehicleChargeController: &decorateTronityVehicleChargeControllerImpl{ - vehicleStartCharge: vehicleStartCharge, - vehicleStopCharge: vehicleStopCharge, - }, } - case chargeState == nil && vehicleOdometer != nil && vehicleStartCharge != nil && vehicleStopCharge != nil: + case chargeController != nil && chargeState == nil && vehicleOdometer != nil: return &struct { *Tronity + api.ChargeController api.VehicleOdometer - api.VehicleChargeController }{ Tronity: base, + ChargeController: &decorateTronityChargeControllerImpl{ + chargeController: chargeController, + }, VehicleOdometer: &decorateTronityVehicleOdometerImpl{ vehicleOdometer: vehicleOdometer, }, - VehicleChargeController: &decorateTronityVehicleChargeControllerImpl{ - vehicleStartCharge: vehicleStartCharge, - vehicleStopCharge: vehicleStopCharge, - }, } - case chargeState != nil && vehicleOdometer != nil && vehicleStartCharge != nil && vehicleStopCharge != nil: + case chargeController != nil && chargeState != nil && vehicleOdometer != nil: return &struct { *Tronity + api.ChargeController api.ChargeState api.VehicleOdometer - api.VehicleChargeController }{ Tronity: base, + ChargeController: &decorateTronityChargeControllerImpl{ + chargeController: chargeController, + }, ChargeState: &decorateTronityChargeStateImpl{ chargeState: chargeState, }, VehicleOdometer: &decorateTronityVehicleOdometerImpl{ vehicleOdometer: vehicleOdometer, }, - VehicleChargeController: &decorateTronityVehicleChargeControllerImpl{ - vehicleStartCharge: vehicleStartCharge, - vehicleStopCharge: vehicleStopCharge, - }, } } return nil } +type decorateTronityChargeControllerImpl struct { + chargeController func(bool) error +} + +func (impl *decorateTronityChargeControllerImpl) ChargeEnable(p0 bool) error { + return impl.chargeController(p0) +} + type decorateTronityChargeStateImpl struct { chargeState func() (api.ChargeStatus, error) } @@ -142,16 +135,3 @@ type decorateTronityVehicleOdometerImpl struct { func (impl *decorateTronityVehicleOdometerImpl) Odometer() (float64, error) { return impl.vehicleOdometer() } - -type decorateTronityVehicleChargeControllerImpl struct { - vehicleStartCharge func() error - vehicleStopCharge func() error -} - -func (impl *decorateTronityVehicleChargeControllerImpl) StartCharge() error { - return impl.vehicleStartCharge() -} - -func (impl *decorateTronityVehicleChargeControllerImpl) StopCharge() error { - return impl.vehicleStopCharge() -} diff --git a/vehicle/vehicle.go b/vehicle/vehicle.go index 0a4c03144..b4caa3ae7 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.CurrentController,MaxCurrent,func(int64) 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" -t "api.ChargeController,ChargeEnable,func(bool) error" // Vehicle is an api.Vehicle implementation with configurable getters and setters. type Vehicle struct { @@ -23,14 +23,15 @@ 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 - MaxCurrent *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 + ChargeEnable *provider.Config } if err := util.DecodeOther(other, &cc); err != nil { @@ -115,7 +116,16 @@ func NewConfigurableFromConfig(other map[string]interface{}) (api.Vehicle, error } } - return decorateVehicle(v, status, rng, odo, climater, maxCurrent, wakeup), nil + // decorate chargeEnable + var chargeEnable func(bool) error + if cc.ChargeEnable != nil { + chargeEnable, err = provider.NewBoolSetterFromConfig("chargeEnable", *cc.ChargeEnable) + if err != nil { + return nil, fmt.Errorf("chargeEnable: %w", err) + } + } + + return decorateVehicle(v, status, rng, odo, climater, maxCurrent, wakeup, chargeEnable), nil } // Soc implements the api.Vehicle interface diff --git a/vehicle/vehicle_decorators.go b/vehicle/vehicle_decorators.go index b302ace68..e61c9b648 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), currentController func(int64) 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, chargeController func(bool) error) api.Vehicle { switch { - case chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: return base - case chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && 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 && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -244,7 +244,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.CurrentController @@ -255,7 +255,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -270,7 +270,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.CurrentController @@ -285,7 +285,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -304,7 +304,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.CurrentController @@ -319,7 +319,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -338,7 +338,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.CurrentController @@ -357,7 +357,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -380,7 +380,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.CurrentController @@ -395,7 +395,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -414,7 +414,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.CurrentController @@ -433,7 +433,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -456,7 +456,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.CurrentController @@ -475,7 +475,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -498,7 +498,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.CurrentController @@ -521,7 +521,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -548,7 +548,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -559,7 +559,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -574,7 +574,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -589,7 +589,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -608,7 +608,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -623,7 +623,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -642,7 +642,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -661,7 +661,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -684,7 +684,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -699,7 +699,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -718,7 +718,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -737,7 +737,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -760,7 +760,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.Resurrector @@ -779,7 +779,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -802,7 +802,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.Resurrector @@ -825,7 +825,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -852,7 +852,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.CurrentController @@ -867,7 +867,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -886,7 +886,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.CurrentController @@ -905,7 +905,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -928,7 +928,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.CurrentController @@ -947,7 +947,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -970,7 +970,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.CurrentController @@ -993,7 +993,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -1020,7 +1020,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.CurrentController @@ -1039,7 +1039,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -1062,7 +1062,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.CurrentController @@ -1085,7 +1085,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -1112,7 +1112,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.CurrentController @@ -1135,7 +1135,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: return &struct { api.Vehicle api.ChargeState @@ -1162,7 +1162,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.CurrentController @@ -1189,7 +1189,7 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err }, } - case chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + case chargeController == nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: return &struct { api.Vehicle api.ChargeState @@ -1219,11 +1219,1491 @@ func decorateVehicle(base api.Vehicle, chargeState func() (api.ChargeStatus, err vehicleRange: vehicleRange, }, } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.VehicleClimater + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.VehicleClimater + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.VehicleClimater + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.VehicleClimater + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector == nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.Resurrector + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.Resurrector + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.Resurrector + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.Resurrector + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.Resurrector + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.Resurrector + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.Resurrector + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.Resurrector + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.Resurrector + api.VehicleClimater + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.Resurrector + api.VehicleClimater + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.Resurrector + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.Resurrector + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState == nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController == nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.Resurrector + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.Resurrector + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.Resurrector + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.Resurrector + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.Resurrector + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater == nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.Resurrector + api.VehicleClimater + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleClimater + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer == nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange == nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + ChargeState: &decorateVehicleChargeStateImpl{ + chargeState: chargeState, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + } + + case chargeController != nil && chargeState == nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + CurrentController: &decorateVehicleCurrentControllerImpl{ + currentController: currentController, + }, + Resurrector: &decorateVehicleResurrectorImpl{ + resurrector: resurrector, + }, + VehicleClimater: &decorateVehicleVehicleClimaterImpl{ + vehicleClimater: vehicleClimater, + }, + VehicleOdometer: &decorateVehicleVehicleOdometerImpl{ + vehicleOdometer: vehicleOdometer, + }, + VehicleRange: &decorateVehicleVehicleRangeImpl{ + vehicleRange: vehicleRange, + }, + } + + case chargeController != nil && chargeState != nil && currentController != nil && resurrector != nil && vehicleClimater != nil && vehicleOdometer != nil && vehicleRange != nil: + return &struct { + api.Vehicle + api.ChargeController + api.ChargeState + api.CurrentController + api.Resurrector + api.VehicleClimater + api.VehicleOdometer + api.VehicleRange + }{ + Vehicle: base, + ChargeController: &decorateVehicleChargeControllerImpl{ + chargeController: chargeController, + }, + 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 } +type decorateVehicleChargeControllerImpl struct { + chargeController func(bool) error +} + +func (impl *decorateVehicleChargeControllerImpl) ChargeEnable(p0 bool) error { + return impl.chargeController(p0) +} + type decorateVehicleChargeStateImpl struct { chargeState func() (api.ChargeStatus, error) } diff --git a/vehicle/vw/id/provider.go b/vehicle/vw/id/provider.go index ec62d80ef..94c4cb1bc 100644 --- a/vehicle/vw/id/provider.go +++ b/vehicle/vw/id/provider.go @@ -156,21 +156,17 @@ func (v *Provider) TargetSoc() (float64, error) { return float64(*res.Charging.ChargingSettings.Value.TargetSOCPct), nil } -var _ api.VehicleChargeController = (*Provider)(nil) +var _ api.ChargeController = (*Provider)(nil) -// StartCharge implements the api.VehicleChargeController interface -func (v *Provider) StartCharge() error { - return v.action(ActionCharge, ActionChargeStart) -} - -// StopCharge implements the api.VehicleChargeController interface -func (v *Provider) StopCharge() error { - return v.action(ActionCharge, ActionChargeStop) +// ChargeEnable implements the api.ChargeController interface +func (v *Provider) ChargeEnable(enable bool) error { + action := map[bool]string{true: ActionChargeStart, false: ActionChargeStop} + return v.action(ActionCharge, action[enable]) } var _ api.Resurrector = (*Provider)(nil) // WakeUp implements the api.Resurrector interface func (v *Provider) WakeUp() error { - return v.StartCharge() + return v.ChargeEnable(true) } diff --git a/vehicle/vw/provider.go b/vehicle/vw/provider.go index 853b7f84c..64faf0618 100644 --- a/vehicle/vw/provider.go +++ b/vehicle/vw/provider.go @@ -164,16 +164,12 @@ func (v *Provider) Position() (float64, float64, error) { return 0, 0, err } -var _ api.VehicleChargeController = (*Provider)(nil) +var _ api.ChargeController = (*Provider)(nil) -// StartCharge implements the api.VehicleChargeController interface -func (v *Provider) StartCharge() error { - return v.action(ActionCharge, ActionChargeStart) -} - -// StopCharge implements the api.VehicleChargeController interface -func (v *Provider) StopCharge() error { - return v.action(ActionCharge, ActionChargeStop) +// ChargeEnable implements the api.ChargeController interface +func (v *Provider) ChargeEnable(enable bool) error { + action := map[bool]string{true: ActionChargeStart, false: ActionChargeStop} + return v.action(ActionCharge, action[enable]) } var _ api.Diagnosis = (*Provider)(nil)