From 431066eebb10d3835f15381880d30a6b837edce7 Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 26 May 2024 16:20:10 +0200 Subject: [PATCH] chore: make vin extraction more flexible --- vehicle/audi.go | 4 ++-- vehicle/bluelink.go | 4 ++-- vehicle/bmw.go | 4 ++-- vehicle/ford-connect.go | 15 ++------------- vehicle/helper.go | 15 ++++++++++----- vehicle/polestar.go | 4 ++-- vehicle/porsche.go | 4 ++-- vehicle/psa.go | 4 ++-- vehicle/renault.go | 4 ++-- vehicle/seat-cupra.go | 4 ++-- vehicle/skoda-enyaq.go | 4 ++-- vehicle/skoda.go | 4 ++-- vehicle/tesla.go | 4 ++-- vehicle/tronity.go | 4 ++-- vehicle/vw.go | 4 ++-- 15 files changed, 38 insertions(+), 44 deletions(-) diff --git a/vehicle/audi.go b/vehicle/audi.go index 25279c17d..1a82f89ef 100644 --- a/vehicle/audi.go +++ b/vehicle/audi.go @@ -76,8 +76,8 @@ func NewAudiFromConfig(other map[string]interface{}) (api.Vehicle, error) { defer cancel() return api.Vehicles(ctx) }, - func(v etron.Vehicle) string { - return v.VIN + func(v etron.Vehicle) (string, error) { + return v.VIN, nil }, ) diff --git a/vehicle/bluelink.go b/vehicle/bluelink.go index a85d9998f..ba71c5870 100644 --- a/vehicle/bluelink.go +++ b/vehicle/bluelink.go @@ -84,8 +84,8 @@ func newBluelinkFromConfig(brand string, other map[string]interface{}, settings vehicle, err := ensureVehicleEx( cc.VIN, api.Vehicles, - func(v bluelink.Vehicle) string { - return v.VIN + func(v bluelink.Vehicle) (string, error) { + return v.VIN, nil }, ) if err != nil { diff --git a/vehicle/bmw.go b/vehicle/bmw.go index f43f55f45..bc7fa5bdb 100644 --- a/vehicle/bmw.go +++ b/vehicle/bmw.go @@ -65,8 +65,8 @@ func NewBMWMiniFromConfig(brand string, other map[string]interface{}) (api.Vehic vehicle, err := ensureVehicleEx( cc.VIN, api.Vehicles, - func(v bmw.Vehicle) string { - return v.VIN + func(v bmw.Vehicle) (string, error) { + return v.VIN, nil }, ) diff --git a/vehicle/ford-connect.go b/vehicle/ford-connect.go index 68b553e1e..485bec5cc 100644 --- a/vehicle/ford-connect.go +++ b/vehicle/ford-connect.go @@ -54,20 +54,9 @@ func NewFordConnectFromConfig(other map[string]interface{}) (api.Vehicle, error) api := connect.NewAPI(log, identity) - var vinErr error - vehicle, err := ensureVehicleEx(cc.VIN, api.Vehicles, func(v connect.Vehicle) string { - if vinErr != nil { - return "" - } - vin, err := api.VIN(v.VehicleID) - if err != nil { - vinErr = err - } - return vin + vehicle, err := ensureVehicleEx(cc.VIN, api.Vehicles, func(v connect.Vehicle) (string, error) { + return api.VIN(v.VehicleID) }) - if err == nil { - err = vinErr - } if err != nil { return nil, err } diff --git a/vehicle/helper.go b/vehicle/helper.go index 182b12923..2d15ebb69 100644 --- a/vehicle/helper.go +++ b/vehicle/helper.go @@ -9,8 +9,8 @@ import ( // ensureVehicle extracts VIN from list of VINs returned from `list` function func ensureVehicle(vin string, list func() ([]string, error)) (string, error) { - return ensureVehicleEx(vin, list, func(v string) string { - return v + return ensureVehicleEx(vin, list, func(v string) (string, error) { + return v, nil }) } @@ -18,7 +18,7 @@ func ensureVehicle(vin string, list func() ([]string, error)) (string, error) { func ensureVehicleEx[T any]( vin string, list func() ([]T, error), - extract func(T) string, + extract func(T) (string, error), ) (T, error) { var zero T @@ -30,7 +30,11 @@ func ensureVehicleEx[T any]( if vin := strings.ToUpper(vin); vin != "" { // vin defined for _, vehicle := range vehicles { - if vin == extract(vehicle) { + vv, err := extract(vehicle) + if err != nil { + return zero, err + } + if strings.ToUpper(vv) == vin { return vehicle, nil } } @@ -40,6 +44,7 @@ func ensureVehicleEx[T any]( } return zero, fmt.Errorf("cannot find vehicle, got: %v", lo.Map(vehicles, func(v T, _ int) string { - return extract(v) + vin, _ := extract(v) + return vin })) } diff --git a/vehicle/polestar.go b/vehicle/polestar.go index bf21cbb66..de863480e 100644 --- a/vehicle/polestar.go +++ b/vehicle/polestar.go @@ -55,8 +55,8 @@ func NewPolestarFromConfig(other map[string]interface{}) (api.Vehicle, error) { ctx, cancel := context.WithTimeout(context.Background(), cc.Timeout) defer cancel() return api.Vehicles(ctx) - }, func(v polestar.ConsumerCar) string { - return v.VIN + }, func(v polestar.ConsumerCar) (string, error) { + return v.VIN, nil }) if err == nil { diff --git a/vehicle/porsche.go b/vehicle/porsche.go index 9396c3adf..7792078ae 100644 --- a/vehicle/porsche.go +++ b/vehicle/porsche.go @@ -48,8 +48,8 @@ func NewPorscheFromConfig(other map[string]interface{}) (api.Vehicle, error) { vehicle, err := ensureVehicleEx( cc.VIN, api.Vehicles, - func(v porsche.Vehicle) string { - return v.VIN + func(v porsche.Vehicle) (string, error) { + return v.VIN, nil }, ) if err != nil { diff --git a/vehicle/psa.go b/vehicle/psa.go index 36d0ea9b8..6ecf58ff3 100644 --- a/vehicle/psa.go +++ b/vehicle/psa.go @@ -77,8 +77,8 @@ func newPSA(brand, realm string, other map[string]interface{}) (api.Vehicle, err vehicle, err := ensureVehicleEx( cc.VIN, api.Vehicles, - func(v psa.Vehicle) string { - return v.VIN + func(v psa.Vehicle) (string, error) { + return v.VIN, nil }, ) if err != nil { diff --git a/vehicle/renault.go b/vehicle/renault.go index 141bebe71..26ce3f4a0 100644 --- a/vehicle/renault.go +++ b/vehicle/renault.go @@ -85,8 +85,8 @@ func NewRenaultDaciaFromConfig(brand string, other map[string]interface{}) (api. func() ([]kamereon.Vehicle, error) { return api.Vehicles(accountID) }, - func(v kamereon.Vehicle) string { - return v.VIN + func(v kamereon.Vehicle) (string, error) { + return v.VIN, nil }, ) diff --git a/vehicle/seat-cupra.go b/vehicle/seat-cupra.go index 167e71e61..370d0595b 100644 --- a/vehicle/seat-cupra.go +++ b/vehicle/seat-cupra.go @@ -68,8 +68,8 @@ func NewCupraFromConfig(other map[string]interface{}) (api.Vehicle, error) { cc.VIN, func() ([]cupra.Vehicle, error) { return api.Vehicles(ui.Subject) }, - func(v cupra.Vehicle) string { - return v.VIN + func(v cupra.Vehicle) (string, error) { + return v.VIN, nil }, ) diff --git a/vehicle/skoda-enyaq.go b/vehicle/skoda-enyaq.go index 03d700d45..4218467a2 100644 --- a/vehicle/skoda-enyaq.go +++ b/vehicle/skoda-enyaq.go @@ -61,8 +61,8 @@ func NewEnyaqFromConfig(other map[string]interface{}) (api.Vehicle, error) { vehicle, err := ensureVehicleEx( cc.VIN, api.Vehicles, - func(v skoda.Vehicle) string { - return v.VIN + func(v skoda.Vehicle) (string, error) { + return v.VIN, nil }, ) diff --git a/vehicle/skoda.go b/vehicle/skoda.go index 83c5849f5..3b48649ee 100644 --- a/vehicle/skoda.go +++ b/vehicle/skoda.go @@ -61,8 +61,8 @@ func NewSkodaFromConfig(other map[string]interface{}) (api.Vehicle, error) { vehicle, err := ensureVehicleEx( cc.VIN, api.Vehicles, - func(v skoda.Vehicle) string { - return v.VIN + func(v skoda.Vehicle) (string, error) { + return v.VIN, nil }, ) diff --git a/vehicle/tesla.go b/vehicle/tesla.go index 62b9acf58..110ab3b2e 100644 --- a/vehicle/tesla.go +++ b/vehicle/tesla.go @@ -86,8 +86,8 @@ func NewTeslaFromConfig(other map[string]interface{}) (api.Vehicle, error) { vehicle, err := ensureVehicleEx( cc.VIN, tc.Vehicles, - func(v *tesla.Vehicle) string { - return v.Vin + func(v *tesla.Vehicle) (string, error) { + return v.Vin, nil }, ) if err != nil { diff --git a/vehicle/tronity.go b/vehicle/tronity.go index f4b2f03ab..477b4756a 100644 --- a/vehicle/tronity.go +++ b/vehicle/tronity.go @@ -111,8 +111,8 @@ func NewTronityFromConfig(other map[string]interface{}) (api.Vehicle, error) { vehicle, err := ensureVehicleEx( cc.VIN, v.vehicles, - func(v tronity.Vehicle) string { - return v.VIN + func(v tronity.Vehicle) (string, error) { + return v.VIN, nil }, ) if err != nil { diff --git a/vehicle/vw.go b/vehicle/vw.go index 54126dfbd..ef1b2e55b 100644 --- a/vehicle/vw.go +++ b/vehicle/vw.go @@ -66,8 +66,8 @@ func NewIDFromConfig(other map[string]interface{}) (api.Vehicle, error) { vehicle, err := ensureVehicleEx( cc.VIN, api.Vehicles, - func(v id.Vehicle) string { - return v.VIN + func(v id.Vehicle) (string, error) { + return v.VIN, nil }, )