91 lines
1.8 KiB
Go
91 lines
1.8 KiB
Go
package config
|
|
|
|
type Device[T any] interface {
|
|
Config() Named
|
|
Instance() T
|
|
}
|
|
type ConfigurableDevice[T any] interface {
|
|
Device[T]
|
|
ID() int
|
|
// Assign(T)
|
|
// Update1(map[string]any) error
|
|
Update(map[string]any, T) error
|
|
PartialUpdate(map[string]any, T) error
|
|
Delete() error
|
|
}
|
|
|
|
type configurableDevice[T any] struct {
|
|
config *Config
|
|
instance T
|
|
}
|
|
|
|
func NewConfigurableDevice[T any](config *Config, instance T) ConfigurableDevice[T] {
|
|
return &configurableDevice[T]{
|
|
config: config,
|
|
instance: instance,
|
|
}
|
|
}
|
|
|
|
func (d *configurableDevice[T]) Config() Named {
|
|
return d.config.Named()
|
|
}
|
|
|
|
func (d *configurableDevice[T]) Instance() T {
|
|
return d.instance
|
|
}
|
|
|
|
func (d *configurableDevice[T]) ID() int {
|
|
return d.config.ID
|
|
}
|
|
|
|
// func (d *configurableDevice[T]) Assign(instance T) {
|
|
// d.instance = instance
|
|
// }
|
|
|
|
// func (d *configurableDevice[T]) Update(config map[string]any) error {
|
|
// return d.config.Update(config)
|
|
// }
|
|
|
|
func (d *configurableDevice[T]) Update(config map[string]any, instance T) error {
|
|
if err := d.config.Update(config); err != nil {
|
|
return err
|
|
}
|
|
d.instance = instance
|
|
return nil
|
|
}
|
|
|
|
func (d *configurableDevice[T]) PartialUpdate(config map[string]any, instance T) error {
|
|
if err := d.config.PartialUpdate(config); err != nil {
|
|
return err
|
|
}
|
|
d.instance = instance
|
|
return nil
|
|
}
|
|
|
|
func (d *configurableDevice[T]) Delete() error {
|
|
return d.config.Delete()
|
|
}
|
|
|
|
type staticDevice[T any] struct {
|
|
config Named
|
|
instance T
|
|
}
|
|
|
|
func NewStaticDevice[T any](config Named, instance T) Device[T] {
|
|
return &staticDevice[T]{
|
|
config: config,
|
|
instance: instance,
|
|
}
|
|
}
|
|
|
|
func (d *staticDevice[T]) Configurable() bool {
|
|
return true
|
|
}
|
|
|
|
func (d *staticDevice[T]) Config() Named {
|
|
return d.config
|
|
}
|
|
|
|
func (d *staticDevice[T]) Instance() T {
|
|
return d.instance
|
|
}
|