Codebase list golang-github-spf13-viper / 699d749
feat(encoding): Add toml codec Signed-off-by: Mark Sagi-Kazar <mark.sagikazar@gmail.com> Mark Sagi-Kazar authored 3 years ago Márk Sági-Kazár committed 2 years ago
1 changed file(s) with 45 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
0 package toml
1
2 import (
3 "github.com/pelletier/go-toml"
4 )
5
6 // Codec implements the encoding.Encoder and encoding.Decoder interfaces for TOML encoding.
7 type Codec struct{}
8
9 func (Codec) Encode(v interface{}) ([]byte, error) {
10 if m, ok := v.(map[string]interface{}); ok {
11 t, err := toml.TreeFromMap(m)
12 if err != nil {
13 return nil, err
14 }
15
16 s, err := t.ToTomlString()
17 if err != nil {
18 return nil, err
19 }
20
21 return []byte(s), nil
22 }
23
24 return toml.Marshal(v)
25 }
26
27 func (Codec) Decode(b []byte, v interface{}) error {
28 tree, err := toml.LoadBytes(b)
29 if err != nil {
30 return err
31 }
32
33 if m, ok := v.(*map[string]interface{}); ok {
34 vmap := *m
35 tmap := tree.ToMap()
36 for k, v := range tmap {
37 vmap[k] = v
38 }
39
40 return nil
41 }
42
43 return tree.Unmarshal(v)
44 }