github.com/DominikUrban/viper@v0.0.0-20220730150717-aaf74638bd32/internal/encoding/toml/codec.go (about)

     1  //go:build viper_toml1
     2  // +build viper_toml1
     3  
     4  package toml
     5  
     6  import (
     7  	"github.com/pelletier/go-toml"
     8  )
     9  
    10  // Codec implements the encoding.Encoder and encoding.Decoder interfaces for TOML encoding.
    11  type Codec struct{}
    12  
    13  func (Codec) Encode(v map[string]interface{}) ([]byte, error) {
    14  	t, err := toml.TreeFromMap(v)
    15  	if err != nil {
    16  		return nil, err
    17  	}
    18  
    19  	s, err := t.ToTomlString()
    20  	if err != nil {
    21  		return nil, err
    22  	}
    23  
    24  	return []byte(s), nil
    25  }
    26  
    27  func (Codec) Decode(b []byte, v map[string]interface{}) error {
    28  	tree, err := toml.LoadBytes(b)
    29  	if err != nil {
    30  		return err
    31  	}
    32  
    33  	tmap := tree.ToMap()
    34  	for key, value := range tmap {
    35  		v[key] = value
    36  	}
    37  
    38  	return nil
    39  }