Compare commits
	
		
			2 Commits
		
	
	
		
			3d2005a8a2
			...
			02d36e3d69
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						02d36e3d69
	
				 | 
					
					
						|||
| 
						
						
							
						
						9733bb42a8
	
				 | 
					
					
						
							
								
								
									
										31
									
								
								datatype.go
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								datatype.go
									
									
									
									
									
								
							@@ -1,10 +1,11 @@
 | 
			
		||||
package envconf
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DataType int
 | 
			
		||||
type DataType uint
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	TypeNone      DataType = iota
 | 
			
		||||
@@ -15,12 +16,20 @@ const (
 | 
			
		||||
	TypeDirectory DataType = iota
 | 
			
		||||
	TypeBool      DataType = iota
 | 
			
		||||
	TypeHex       DataType = iota
 | 
			
		||||
	TypeHex16     DataType = iota
 | 
			
		||||
	TypeHex32     DataType = iota
 | 
			
		||||
	TypeHex64     DataType = iota
 | 
			
		||||
	TypeHex128    DataType = iota
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func FixedHex(size uint) DataType {
 | 
			
		||||
	return (DataType)(size<<16) | TypeHex
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (dtype DataType) baseType() DataType {
 | 
			
		||||
	return dtype & 0xffff
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (dtype DataType) typeAndSize() (DataType, uint) {
 | 
			
		||||
	return (dtype & 0xffff), uint(dtype >> 16)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type cValue struct {
 | 
			
		||||
	dtype   DataType
 | 
			
		||||
	intval  int64
 | 
			
		||||
@@ -32,18 +41,24 @@ type cValue struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (dtype DataType) parse(key string, str string) (ret cValue) {
 | 
			
		||||
	info, ok := tInfo[dtype]
 | 
			
		||||
	rdtype, size := dtype.typeAndSize()
 | 
			
		||||
	info, ok := tInfo[rdtype]
 | 
			
		||||
	if ok {
 | 
			
		||||
		ret = info.parser(key, str)
 | 
			
		||||
		ret = info.parser(key, str, size)
 | 
			
		||||
		if len(ret.binval) == 0 {
 | 
			
		||||
			ret.binval = make([]byte, 0, 0)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (dtype DataType) String() string {
 | 
			
		||||
	info, ok := tInfo[dtype]
 | 
			
		||||
	rdtype, size := dtype.typeAndSize()
 | 
			
		||||
	info, ok := tInfo[rdtype]
 | 
			
		||||
	if ok {
 | 
			
		||||
		if size > 0 {
 | 
			
		||||
			return fmt.Sprintf("%s%d", info.name, size)
 | 
			
		||||
		}
 | 
			
		||||
		return info.name
 | 
			
		||||
	}
 | 
			
		||||
	return "invalid"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										64
									
								
								envconf.go
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								envconf.go
									
									
									
									
									
								
							@@ -287,7 +287,7 @@ func (c *Config) getRaw(key string, dtype DataType) (val cValue) {
 | 
			
		||||
	if c.parsed {
 | 
			
		||||
		key = cleanKey(key)
 | 
			
		||||
		entry, ok := c.env[key]
 | 
			
		||||
		if ok && (entry.dtype == dtype) {
 | 
			
		||||
		if ok && (entry.dtype.baseType() == dtype.baseType()) {
 | 
			
		||||
			return entry.parsed
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -303,7 +303,7 @@ func (c *Config) getRawMap(key string, dtype DataType) (empty map[string]cValue)
 | 
			
		||||
 | 
			
		||||
		if ok {
 | 
			
		||||
			for k, v := range entries {
 | 
			
		||||
				if (v.dtype == dtype) && (v.parsed.err == nil) {
 | 
			
		||||
				if (v.dtype.baseType() == dtype.baseType()) && (v.parsed.err == nil) {
 | 
			
		||||
					retval[k] = v.parsed
 | 
			
		||||
				} else {
 | 
			
		||||
					return
 | 
			
		||||
@@ -329,34 +329,6 @@ func (c *Config) GetHex(key string) []byte {
 | 
			
		||||
	return val.binval
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns the value of an environment variable.
 | 
			
		||||
// If the variable is not defined as envconf.TypeHex16 the function will return []byte{}.
 | 
			
		||||
func (c *Config) GetHex16(key string) []byte {
 | 
			
		||||
	val := c.getRaw(key, TypeHex16)
 | 
			
		||||
	return val.binval
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns the value of an environment variable.
 | 
			
		||||
// If the variable is not defined as envconf.TypeHex32 the function will return []byte{}.
 | 
			
		||||
func (c *Config) GetHex32(key string) []byte {
 | 
			
		||||
	val := c.getRaw(key, TypeHex32)
 | 
			
		||||
	return val.binval
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns the value of an environment variable.
 | 
			
		||||
// If the variable is not defined as envconf.TypeHex64 the function will return []byte{}.
 | 
			
		||||
func (c *Config) GetHex64(key string) []byte {
 | 
			
		||||
	val := c.getRaw(key, TypeHex64)
 | 
			
		||||
	return val.binval
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns the value of an environment variable.
 | 
			
		||||
// If the variable is not defined as envconf.TypeHex128 the function will return []byte{}.
 | 
			
		||||
func (c *Config) GetHex128(key string) []byte {
 | 
			
		||||
	val := c.getRaw(key, TypeHex128)
 | 
			
		||||
	return val.binval
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns the value of an environment variable.
 | 
			
		||||
// If the variable is not defined as envconf.TypeMetric the function will return 0.
 | 
			
		||||
func (c *Config) GetMetric(key string) int64 {
 | 
			
		||||
@@ -436,38 +408,6 @@ func (c *Config) GetMapHex(key string) (retval map[string][]byte) {
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Config) GetMapHex16(key string) (retval map[string][]byte) {
 | 
			
		||||
	retval = make(map[string][]byte)
 | 
			
		||||
	for k, v := range c.getRawMap(key, TypeHex16) {
 | 
			
		||||
		retval[k] = v.binval
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Config) GetMapHex32(key string) (retval map[string][]byte) {
 | 
			
		||||
	retval = make(map[string][]byte)
 | 
			
		||||
	for k, v := range c.getRawMap(key, TypeHex32) {
 | 
			
		||||
		retval[k] = v.binval
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Config) GetMapHex64(key string) (retval map[string][]byte) {
 | 
			
		||||
	retval = make(map[string][]byte)
 | 
			
		||||
	for k, v := range c.getRawMap(key, TypeHex64) {
 | 
			
		||||
		retval[k] = v.binval
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Config) GetMapHex128(key string) (retval map[string][]byte) {
 | 
			
		||||
	retval = make(map[string][]byte)
 | 
			
		||||
	for k, v := range c.getRawMap(key, TypeHex128) {
 | 
			
		||||
		retval[k] = v.binval
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getFirstRune(str string) rune {
 | 
			
		||||
	for _, v := range str {
 | 
			
		||||
		return v
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										62
									
								
								parsers.go
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								parsers.go
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ import (
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func parseInt(key string, str string) (ret cValue) {
 | 
			
		||||
func parseInt(key string, str string, _ uint) (ret cValue) {
 | 
			
		||||
	val, err := strconv.ParseInt(str, 10, 64)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		ret.intval = val
 | 
			
		||||
@@ -21,7 +21,7 @@ func parseInt(key string, str string) (ret cValue) {
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseMetric(key string, str string) (ret cValue) {
 | 
			
		||||
func parseMetric(key string, str string, _ uint) (ret cValue) {
 | 
			
		||||
	mod := int64(1)
 | 
			
		||||
	str = strings.ToUpper(str)
 | 
			
		||||
	if strings.HasSuffix(str, "K") {
 | 
			
		||||
@@ -46,7 +46,7 @@ func parseMetric(key string, str string) (ret cValue) {
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseDuration(key string, str string) (ret cValue) {
 | 
			
		||||
func parseDuration(key string, str string, _ uint) (ret cValue) {
 | 
			
		||||
	val, err := time.ParseDuration(str)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		ret.durval = val
 | 
			
		||||
@@ -56,7 +56,7 @@ func parseDuration(key string, str string) (ret cValue) {
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseBool(key string, str string) (ret cValue) {
 | 
			
		||||
func parseBool(key string, str string, _ uint) (ret cValue) {
 | 
			
		||||
	val, err := strconv.ParseBool(str)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		ret.boolval = val
 | 
			
		||||
@@ -66,57 +66,21 @@ func parseBool(key string, str string) (ret cValue) {
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseHex(key string, str string) (ret cValue) {
 | 
			
		||||
func parseHex(key string, str string, size uint) (ret cValue) {
 | 
			
		||||
	val, err := hex.DecodeString(str)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
	if err == nil && (size == 0 || size == uint(len(val))) {
 | 
			
		||||
		ret.binval = val
 | 
			
		||||
	} else {
 | 
			
		||||
		ret.err = errors.New(fmt.Sprintf(`Environment variable "%s" is not of type hex.`, key))
 | 
			
		||||
		if size == 0 {
 | 
			
		||||
			ret.err = errors.New(fmt.Sprintf(`Environment variable "%s" is not of type hex.`, key))
 | 
			
		||||
		} else {
 | 
			
		||||
			ret.err = errors.New(fmt.Sprintf(`Environment variable "%s" is not of type hex%d.`, key, size))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseHex16(key string, str string) (ret cValue) {
 | 
			
		||||
	val, err := hex.DecodeString(str)
 | 
			
		||||
	if err == nil && len(val) == 16 {
 | 
			
		||||
		ret.binval = val
 | 
			
		||||
	} else {
 | 
			
		||||
		ret.err = errors.New(fmt.Sprintf(`Environment variable "%s" is not of type hex16.`, key))
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseHex32(key string, str string) (ret cValue) {
 | 
			
		||||
	val, err := hex.DecodeString(str)
 | 
			
		||||
	if err == nil && len(val) == 32 {
 | 
			
		||||
		ret.binval = val
 | 
			
		||||
	} else {
 | 
			
		||||
		ret.err = errors.New(fmt.Sprintf(`Environment variable "%s" is not of type hex32.`, key))
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseHex64(key string, str string) (ret cValue) {
 | 
			
		||||
	val, err := hex.DecodeString(str)
 | 
			
		||||
	if err == nil && len(val) == 64 {
 | 
			
		||||
		ret.binval = val
 | 
			
		||||
	} else {
 | 
			
		||||
		ret.err = errors.New(fmt.Sprintf(`Environment variable "%s" is not of type hex64.`, key))
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseHex128(key string, str string) (ret cValue) {
 | 
			
		||||
	val, err := hex.DecodeString(str)
 | 
			
		||||
	if err == nil && len(val) == 128 {
 | 
			
		||||
		ret.binval = val
 | 
			
		||||
	} else {
 | 
			
		||||
		ret.err = errors.New(fmt.Sprintf(`Environment variable "%s" is not of type hex128.`, key))
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseDirectory(_ string, str string) (ret cValue) {
 | 
			
		||||
func parseDirectory(_ string, str string, _ uint) (ret cValue) {
 | 
			
		||||
	wd, err := os.Getwd()
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		if path.IsAbs(str) {
 | 
			
		||||
@@ -130,7 +94,7 @@ func parseDirectory(_ string, str string) (ret cValue) {
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseString(_ string, str string) (ret cValue) {
 | 
			
		||||
func parseString(_ string, str string, _ uint) (ret cValue) {
 | 
			
		||||
	ret.strval = str
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								typeinfo.go
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								typeinfo.go
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
package envconf
 | 
			
		||||
 | 
			
		||||
type dataTypeInfo struct {
 | 
			
		||||
	parser func(string, string) cValue
 | 
			
		||||
	parser func(string, string, uint) cValue
 | 
			
		||||
	name   string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -16,11 +16,6 @@ func init() {
 | 
			
		||||
	var dirInfo dataTypeInfo
 | 
			
		||||
	var hexInfo dataTypeInfo
 | 
			
		||||
 | 
			
		||||
	var hexInfo16 dataTypeInfo
 | 
			
		||||
	var hexInfo32 dataTypeInfo
 | 
			
		||||
	var hexInfo64 dataTypeInfo
 | 
			
		||||
	var hexInfo128 dataTypeInfo
 | 
			
		||||
 | 
			
		||||
	var boolInfo dataTypeInfo
 | 
			
		||||
 | 
			
		||||
	intInfo.name = "int"
 | 
			
		||||
@@ -38,11 +33,6 @@ func init() {
 | 
			
		||||
	strInfo.parser = parseString
 | 
			
		||||
 | 
			
		||||
	hexInfo.parser = parseHex
 | 
			
		||||
	hexInfo16.parser = parseHex16
 | 
			
		||||
	hexInfo32.parser = parseHex32
 | 
			
		||||
	hexInfo64.parser = parseHex64
 | 
			
		||||
	hexInfo128.parser = parseHex128
 | 
			
		||||
 | 
			
		||||
	boolInfo.parser = parseBool
 | 
			
		||||
 | 
			
		||||
	tInfo[TypeInt] = intInfo
 | 
			
		||||
@@ -51,11 +41,5 @@ func init() {
 | 
			
		||||
	tInfo[TypeString] = strInfo
 | 
			
		||||
	tInfo[TypeDirectory] = dirInfo
 | 
			
		||||
	tInfo[TypeHex] = hexInfo
 | 
			
		||||
 | 
			
		||||
	tInfo[TypeHex16] = hexInfo16
 | 
			
		||||
	tInfo[TypeHex32] = hexInfo32
 | 
			
		||||
	tInfo[TypeHex64] = hexInfo64
 | 
			
		||||
	tInfo[TypeHex128] = hexInfo128
 | 
			
		||||
 | 
			
		||||
	tInfo[TypeBool] = boolInfo
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user