Path: blob/main/vendor/github.com/spf13/viper/internal/encoding/dotenv/codec.go
2898 views
package dotenv12import (3"bytes"4"fmt"5"sort"6"strings"78"github.com/subosito/gotenv"9)1011const keyDelimiter = "_"1213// Codec implements the encoding.Encoder and encoding.Decoder interfaces for encoding data containing environment variables14// (commonly called as dotenv format).15type Codec struct{}1617func (Codec) Encode(v map[string]any) ([]byte, error) {18flattened := map[string]any{}1920flattened = flattenAndMergeMap(flattened, v, "", keyDelimiter)2122keys := make([]string, 0, len(flattened))2324for key := range flattened {25keys = append(keys, key)26}2728sort.Strings(keys)2930var buf bytes.Buffer3132for _, key := range keys {33_, err := buf.WriteString(fmt.Sprintf("%v=%v\n", strings.ToUpper(key), flattened[key]))34if err != nil {35return nil, err36}37}3839return buf.Bytes(), nil40}4142func (Codec) Decode(b []byte, v map[string]any) error {43var buf bytes.Buffer4445_, err := buf.Write(b)46if err != nil {47return err48}4950env, err := gotenv.StrictParse(&buf)51if err != nil {52return err53}5455for key, value := range env {56v[key] = value57}5859return nil60}616263