evcc-io/util/config/instance.go

43 lines
868 B
Go

package config
import (
"github.com/evcc-io/evcc/api"
)
var instance = struct {
meters *handler[api.Meter]
chargers *handler[api.Charger]
vehicles *handler[api.Vehicle]
}{
meters: new(handler[api.Meter]),
chargers: new(handler[api.Charger]),
vehicles: new(handler[api.Vehicle]),
}
type Handler[T any] interface {
Devices() []Device[T]
Add(dev Device[T]) error
Delete(name string) error
ByName(name string) (Device[T], error)
}
func Meters() Handler[api.Meter] {
return instance.meters
}
func Chargers() Handler[api.Charger] {
return instance.chargers
}
func Vehicles() Handler[api.Vehicle] {
return instance.vehicles
}
// Instances returns the instances of the given devices
func Instances[T any](devices []Device[T]) []T {
res := make([]T, 0, len(devices))
for _, dev := range devices {
res = append(res, dev.Instance())
}
return res
}