-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcast.go
42 lines (37 loc) · 1 KB
/
cast.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
package cast
import (
"encoding/json"
"github.com/dyweb/gommon/errors"
yaml "gopkg.in/yaml.v2"
)
// ToStringMap converts a map to use string key, non string key will be ignored
func ToStringMap(interfaceMap map[interface{}]interface{}) map[string]interface{} {
m := make(map[string]interface{}, len(interfaceMap))
for k, val := range interfaceMap {
sk, ok := k.(string)
if ok {
m[sk] = val
}
}
return m
}
func StringMapToStructViaYAML(m map[string]interface{}, s interface{}) error {
b, err := yaml.Marshal(m)
if err != nil {
return errors.Wrap(err, "can't marshal to YAML")
}
if err = yaml.Unmarshal(b, s); err != nil {
return errors.Wrap(err, "can't unmarshal YAML to struct")
}
return nil
}
func StringMapToStructViaJSON(m map[string]interface{}, s interface{}) error {
b, err := json.Marshal(m)
if err != nil {
return errors.Wrap(err, "can't marshal to JSON")
}
if err = json.Unmarshal(b, s); err != nil {
return errors.Wrap(err, "can't unmarshal JSON to struct")
}
return nil
}