github.com/lynxsecurity/viper@v1.10.0/internal/encoding/toml/codec.go (about) 1 package toml 2 3 import ( 4 "github.com/pelletier/go-toml" 5 ) 6 7 // Codec implements the encoding.Encoder and encoding.Decoder interfaces for TOML encoding. 8 type Codec struct{} 9 10 func (Codec) Encode(v interface{}) ([]byte, error) { 11 if m, ok := v.(map[string]interface{}); ok { 12 t, err := toml.TreeFromMap(m) 13 if err != nil { 14 return nil, err 15 } 16 17 s, err := t.ToTomlString() 18 if err != nil { 19 return nil, err 20 } 21 22 return []byte(s), nil 23 } 24 25 return toml.Marshal(v) 26 } 27 28 func (Codec) Decode(b []byte, v interface{}) error { 29 tree, err := toml.LoadBytes(b) 30 if err != nil { 31 return err 32 } 33 34 if m, ok := v.(*map[string]interface{}); ok { 35 vmap := *m 36 tmap := tree.ToMap() 37 for k, v := range tmap { 38 vmap[k] = v 39 } 40 41 return nil 42 } 43 44 return tree.Unmarshal(v) 45 }