/
map.go
53 lines (41 loc) · 933 Bytes
/
map.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package provider
import (
"fmt"
"github.com/evcc-io/evcc/util"
)
type mapProvider struct {
values map[int64]int64
set Config
}
func init() {
registry.Add("map", NewMapFromConfig)
}
// NewMapFromConfig creates type conversion provider
func NewMapFromConfig(other map[string]interface{}) (Provider, error) {
var cc struct {
Values map[int64]int64
Set Config
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
if len(cc.Values) == 0 {
return nil, fmt.Errorf("missing values")
}
o := &mapProvider{
set: cc.Set,
values: cc.Values,
}
return o, nil
}
var _ SetIntProvider = (*mapProvider)(nil)
func (o *mapProvider) IntSetter(param string) (func(int64) error, error) {
set, err := NewIntSetterFromConfig(param, o.set)
return func(val int64) error {
m, ok := o.values[val]
if !ok {
return fmt.Errorf("map: value not found: %d", val)
}
return set(m)
}, err
}