diff --git a/vehicle/bluelink.go b/vehicle/bluelink.go index 7cba58a60..e8a0276c4 100644 --- a/vehicle/bluelink.go +++ b/vehicle/bluelink.go @@ -75,10 +75,10 @@ func newBluelinkFromConfig(brand string, other map[string]interface{}, settings api := bluelink.NewAPI(log, settings.URI, identity) - _, vehicle, err := ensureVehicleWithFeature( + vehicle, err := ensureVehicleEx( cc.VIN, api.Vehicles, - func(v bluelink.Vehicle) (string, bluelink.Vehicle) { - return v.VIN, v + func(v bluelink.Vehicle) string { + return v.VIN }, ) diff --git a/vehicle/helper.go b/vehicle/helper.go index b2a79b7a7..65b31fe37 100644 --- a/vehicle/helper.go +++ b/vehicle/helper.go @@ -5,30 +5,28 @@ import ( "strings" ) -// ensureVehicleWithFeature extracts VIN from list of VINs returned from `list` function +// ensureVehicle extracts VIN from list of VINs returned from `list` function func ensureVehicle(vin string, list func() ([]string, error)) (string, error) { - vin, _, err := ensureVehicleWithFeature(vin, list, func(v string) (string, string) { - return v, "" + return ensureVehicleEx(vin, list, func(v string) string { + return v }) - - return vin, err } -// ensureVehicleWithFeature extracts VIN and feature from list of vehicles of type V returned from `list` function -func ensureVehicleWithFeature[Vehicle, Feature any]( +// ensureVehicleEx extracts vehicle with matching VIN from list of vehicles +func ensureVehicleEx[Vehicle any]( vin string, list func() ([]Vehicle, error), - extract func(Vehicle) (string, Feature), -) (string, Feature, error) { + extract func(Vehicle) string, +) (Vehicle, error) { vehicles, err := list() if err != nil { - return "", *new(Feature), fmt.Errorf("cannot get vehicles: %w", err) + return *new(Vehicle), fmt.Errorf("cannot get vehicles: %w", err) } if vin = strings.ToUpper(vin); vin != "" { for _, vehicle := range vehicles { - if v, res := extract(vehicle); v == vin { - return v, res, nil + if vin == extract(vehicle) { + return vehicle, nil } } @@ -37,12 +35,11 @@ func ensureVehicleWithFeature[Vehicle, Feature any]( } else { // vin empty if len(vehicles) == 1 { - vin, res := extract(vehicles[0]) - return vin, res, nil + return vehicles[0], nil } err = fmt.Errorf("cannot find vehicle: %v", vehicles) } - return "", *new(Feature), err + return *new(Vehicle), err } diff --git a/vehicle/psa.go b/vehicle/psa.go index d69c7e6e9..47ac9f4e3 100644 --- a/vehicle/psa.go +++ b/vehicle/psa.go @@ -96,10 +96,10 @@ func newPSA(log *util.Logger, brand, realm, id, secret string, other map[string] api := psa.NewAPI(log, identity, realm, cc.Credentials.ID) - _, vid, err := ensureVehicleWithFeature( + vehicle, err := ensureVehicleEx( cc.VIN, api.Vehicles, - func(v psa.Vehicle) (string, string) { - return v.VIN, v.ID + func(v psa.Vehicle) string { + return v.VIN }, ) @@ -107,7 +107,7 @@ func newPSA(log *util.Logger, brand, realm, id, secret string, other map[string] return nil, err } - v.Provider = psa.NewProvider(api, vid, cc.Cache) + v.Provider = psa.NewProvider(api, vehicle.ID, cc.Cache) return v, err } diff --git a/vehicle/renault.go b/vehicle/renault.go index 8008fa151..551265fed 100644 --- a/vehicle/renault.go +++ b/vehicle/renault.go @@ -72,23 +72,24 @@ func NewRenaultDaciaFromConfig(brand string, other map[string]interface{}) (api. accountID, err := api.Person(identity.PersonID, brand) - var car kamereon.Vehicle - if err == nil { - cc.VIN, car, err = ensureVehicleWithFeature(cc.VIN, - func() ([]kamereon.Vehicle, error) { - return api.Vehicles(accountID) - }, - func(v kamereon.Vehicle) (string, kamereon.Vehicle) { - return v.VIN, v - }, - ) + if err != nil { + return nil, err } + vehicle, err := ensureVehicleEx(cc.VIN, + func() ([]kamereon.Vehicle, error) { + return api.Vehicles(accountID) + }, + func(v kamereon.Vehicle) string { + return v.VIN + }, + ) + if err == nil { - err = car.Available() + err = vehicle.Available() } - v.Provider = renault.NewProvider(api, accountID, cc.VIN, cc.Cache) + v.Provider = renault.NewProvider(api, accountID, vehicle.VIN, cc.Cache) return v, err } diff --git a/vehicle/skoda-enyaq.go b/vehicle/skoda-enyaq.go index 6a422c7d0..495a5b415 100644 --- a/vehicle/skoda-enyaq.go +++ b/vehicle/skoda-enyaq.go @@ -54,10 +54,10 @@ func NewEnyaqFromConfig(other map[string]interface{}) (api.Vehicle, error) { api := skoda.NewAPI(log, ts) - _, vehicle, err := ensureVehicleWithFeature( + vehicle, err := ensureVehicleEx( cc.VIN, api.Vehicles, - func(v skoda.Vehicle) (string, skoda.Vehicle) { - return v.VIN, v + func(v skoda.Vehicle) string { + return v.VIN }, ) diff --git a/vehicle/tesla.go b/vehicle/tesla.go index a0ae76341..1a3951712 100644 --- a/vehicle/tesla.go +++ b/vehicle/tesla.go @@ -63,10 +63,10 @@ func NewTeslaFromConfig(other map[string]interface{}) (api.Vehicle, error) { return nil, err } - cc.VIN, v.vehicle, err = ensureVehicleWithFeature( + v.vehicle, err = ensureVehicleEx( cc.VIN, client.Vehicles, - func(v *tesla.Vehicle) (string, *tesla.Vehicle) { - return v.Vin, v + func(v *tesla.Vehicle) string { + return v.Vin }, ) diff --git a/vehicle/tronity.go b/vehicle/tronity.go index 631926680..94b05a8fc 100644 --- a/vehicle/tronity.go +++ b/vehicle/tronity.go @@ -111,10 +111,10 @@ func NewTronityFromConfig(other map[string]interface{}) (api.Vehicle, error) { Base: v.Client.Transport, } - _, vehicle, err := ensureVehicleWithFeature( + vehicle, err := ensureVehicleEx( cc.VIN, v.vehicles, - func(v tronity.Vehicle) (string, tronity.Vehicle) { - return v.VIN, v + func(v tronity.Vehicle) string { + return v.VIN }, )