chore: make vin extraction more flexible
This commit is contained in:
parent
37604d8264
commit
431066eebb
15 changed files with 38 additions and 44 deletions
|
|
@ -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
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue