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  }