use go modules
This commit is contained in:
		
							
								
								
									
										61
									
								
								vendor/github.com/spf13/viper/internal/encoding/dotenv/codec.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								vendor/github.com/spf13/viper/internal/encoding/dotenv/codec.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,61 @@
 | 
			
		||||
package dotenv
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"sort"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/subosito/gotenv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const keyDelimiter = "_"
 | 
			
		||||
 | 
			
		||||
// Codec implements the encoding.Encoder and encoding.Decoder interfaces for encoding data containing environment variables
 | 
			
		||||
// (commonly called as dotenv format).
 | 
			
		||||
type Codec struct{}
 | 
			
		||||
 | 
			
		||||
func (Codec) Encode(v map[string]interface{}) ([]byte, error) {
 | 
			
		||||
	flattened := map[string]interface{}{}
 | 
			
		||||
 | 
			
		||||
	flattened = flattenAndMergeMap(flattened, v, "", keyDelimiter)
 | 
			
		||||
 | 
			
		||||
	keys := make([]string, 0, len(flattened))
 | 
			
		||||
 | 
			
		||||
	for key := range flattened {
 | 
			
		||||
		keys = append(keys, key)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sort.Strings(keys)
 | 
			
		||||
 | 
			
		||||
	var buf bytes.Buffer
 | 
			
		||||
 | 
			
		||||
	for _, key := range keys {
 | 
			
		||||
		_, err := buf.WriteString(fmt.Sprintf("%v=%v\n", strings.ToUpper(key), flattened[key]))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return buf.Bytes(), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (Codec) Decode(b []byte, v map[string]interface{}) error {
 | 
			
		||||
	var buf bytes.Buffer
 | 
			
		||||
 | 
			
		||||
	_, err := buf.Write(b)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	env, err := gotenv.StrictParse(&buf)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for key, value := range env {
 | 
			
		||||
		v[key] = value
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								vendor/github.com/spf13/viper/internal/encoding/dotenv/map_utils.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								vendor/github.com/spf13/viper/internal/encoding/dotenv/map_utils.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
			
		||||
package dotenv
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cast"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// flattenAndMergeMap recursively flattens the given map into a new map
 | 
			
		||||
// Code is based on the function with the same name in tha main package.
 | 
			
		||||
// TODO: move it to a common place
 | 
			
		||||
func flattenAndMergeMap(shadow map[string]interface{}, m map[string]interface{}, prefix string, delimiter string) map[string]interface{} {
 | 
			
		||||
	if shadow != nil && prefix != "" && shadow[prefix] != nil {
 | 
			
		||||
		// prefix is shadowed => nothing more to flatten
 | 
			
		||||
		return shadow
 | 
			
		||||
	}
 | 
			
		||||
	if shadow == nil {
 | 
			
		||||
		shadow = make(map[string]interface{})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var m2 map[string]interface{}
 | 
			
		||||
	if prefix != "" {
 | 
			
		||||
		prefix += delimiter
 | 
			
		||||
	}
 | 
			
		||||
	for k, val := range m {
 | 
			
		||||
		fullKey := prefix + k
 | 
			
		||||
		switch val.(type) {
 | 
			
		||||
		case map[string]interface{}:
 | 
			
		||||
			m2 = val.(map[string]interface{})
 | 
			
		||||
		case map[interface{}]interface{}:
 | 
			
		||||
			m2 = cast.ToStringMap(val)
 | 
			
		||||
		default:
 | 
			
		||||
			// immediate value
 | 
			
		||||
			shadow[strings.ToLower(fullKey)] = val
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		// recursively merge to shadow map
 | 
			
		||||
		shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter)
 | 
			
		||||
	}
 | 
			
		||||
	return shadow
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user