43 lines
868 B
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
|
|
}
|