From bb5135e84e5685631e5e26bd9dcbd96bef391357 Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 6 Jun 2021 20:48:11 +0200 Subject: [PATCH] Gracefully error on missing name attribute --- cmd/config.go | 22 +++++++++++++++++----- go.mod | 1 + go.sum | 2 ++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/cmd/config.go b/cmd/config.go index b8f9da253..de8c9cd64 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -11,6 +11,7 @@ import ( "github.com/andig/evcc/push" "github.com/andig/evcc/server" "github.com/andig/evcc/vehicle" + "github.com/dustin/go-humanize" ) type config struct { @@ -100,7 +101,11 @@ func (cp *ConfigProvider) configure(conf config) error { func (cp *ConfigProvider) configureMeters(conf config) error { cp.meters = make(map[string]api.Meter) - for _, cc := range conf.Meters { + for id, cc := range conf.Meters { + if cc.Name == "" { + return fmt.Errorf("cannot create %s meter: missing name", humanize.Ordinal(id+1)) + } + m, err := meter.NewFromConfig(cc.Type, cc.Other) if err != nil { err = fmt.Errorf("cannot create meter '%s': %w", cc.Name, err) @@ -119,7 +124,11 @@ func (cp *ConfigProvider) configureMeters(conf config) error { func (cp *ConfigProvider) configureChargers(conf config) error { cp.chargers = make(map[string]api.Charger) - for _, cc := range conf.Chargers { + for id, cc := range conf.Chargers { + if cc.Name == "" { + return fmt.Errorf("cannot create %s charger: missing name", humanize.Ordinal(id+1)) + } + c, err := charger.NewFromConfig(cc.Type, cc.Other) if err != nil { err = fmt.Errorf("cannot create charger '%s': %w", cc.Name, err) @@ -138,11 +147,14 @@ func (cp *ConfigProvider) configureChargers(conf config) error { func (cp *ConfigProvider) configureVehicles(conf config) error { cp.vehicles = make(map[string]api.Vehicle) - for _, cc := range conf.Vehicles { + for id, cc := range conf.Vehicles { + if cc.Name == "" { + return fmt.Errorf("cannot create %s vehicle: missing name", humanize.Ordinal(id+1)) + } + v, err := vehicle.NewFromConfig(cc.Type, cc.Other) if err != nil { - err = fmt.Errorf("cannot create vehicle '%s': %w", cc.Name, err) - return err + return fmt.Errorf("cannot create vehicle '%s': %w", cc.Name, err) } if _, exists := cp.vehicles[cc.Name]; exists { diff --git a/go.mod b/go.mod index 4dfd2b85f..45668649b 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/containrrr/shoutrrr v0.4.4 github.com/deepmap/oapi-codegen v1.6.1 // indirect github.com/denisbrodbeck/machineid v1.0.1 + github.com/dustin/go-humanize v1.0.0 github.com/dylanmei/iso8601 v0.1.0 github.com/eclipse/paho.mqtt.golang v1.3.4 github.com/fatih/structs v1.1.0 diff --git a/go.sum b/go.sum index fcd7fdbef..ebb90953b 100644 --- a/go.sum +++ b/go.sum @@ -138,6 +138,8 @@ github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbj github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dylanmei/iso8601 v0.1.0 h1:812NGQDBcqquTfH5Yeo7lwR0nzx/cKdsmf3qMjPURUI= github.com/dylanmei/iso8601 v0.1.0/go.mod h1:w9KhXSgIyROl1DefbMYIE7UVSIvELTbMrCfx+QkYnoQ= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=