feat: Add badgerDB support. (#353)
See https://github.com/dgraph-io/badger Slide: https://github.com/gopherchina/conference/blob/master/2018/1.5%20Badger_%20Fast%20Key-Value%20DB%20in%20Go.pdf
This commit is contained in:
181
vendor/github.com/appleboy/com/convert/convert.go
generated
vendored
Normal file
181
vendor/github.com/appleboy/com/convert/convert.go
generated
vendored
Normal file
@@ -0,0 +1,181 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// ToString convert any type to string
|
||||
func ToString(value interface{}) interface{} {
|
||||
if v, ok := value.(*string); ok {
|
||||
return *v
|
||||
}
|
||||
return fmt.Sprintf("%v", value)
|
||||
}
|
||||
|
||||
// ToBool convert any type to boolean
|
||||
func ToBool(value interface{}) interface{} {
|
||||
switch value := value.(type) {
|
||||
case bool:
|
||||
return value
|
||||
case *bool:
|
||||
return *value
|
||||
case string:
|
||||
switch value {
|
||||
case "", "false":
|
||||
return false
|
||||
}
|
||||
return true
|
||||
case *string:
|
||||
return ToBool(*value)
|
||||
case float64:
|
||||
if value != 0 {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
case *float64:
|
||||
return ToBool(*value)
|
||||
case float32:
|
||||
if value != 0 {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
case *float32:
|
||||
return ToBool(*value)
|
||||
case int:
|
||||
if value != 0 {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
case *int:
|
||||
return ToBool(*value)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// ToInt convert any type to int
|
||||
func ToInt(value interface{}) interface{} {
|
||||
switch value := value.(type) {
|
||||
case bool:
|
||||
if value == true {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
case int:
|
||||
if value < int(math.MinInt32) || value > int(math.MaxInt32) {
|
||||
return nil
|
||||
}
|
||||
return value
|
||||
case *int:
|
||||
return ToInt(*value)
|
||||
case int8:
|
||||
return int(value)
|
||||
case *int8:
|
||||
return int(*value)
|
||||
case int16:
|
||||
return int(value)
|
||||
case *int16:
|
||||
return int(*value)
|
||||
case int32:
|
||||
return int(value)
|
||||
case *int32:
|
||||
return int(*value)
|
||||
case int64:
|
||||
if value < int64(math.MinInt32) || value > int64(math.MaxInt32) {
|
||||
return nil
|
||||
}
|
||||
return int(value)
|
||||
case *int64:
|
||||
return ToInt(*value)
|
||||
case uint:
|
||||
if value > math.MaxInt32 {
|
||||
return nil
|
||||
}
|
||||
return int(value)
|
||||
case *uint:
|
||||
return ToInt(*value)
|
||||
case uint8:
|
||||
return int(value)
|
||||
case *uint8:
|
||||
return int(*value)
|
||||
case uint16:
|
||||
return int(value)
|
||||
case *uint16:
|
||||
return int(*value)
|
||||
case uint32:
|
||||
if value > uint32(math.MaxInt32) {
|
||||
return nil
|
||||
}
|
||||
return int(value)
|
||||
case *uint32:
|
||||
return ToInt(*value)
|
||||
case uint64:
|
||||
if value > uint64(math.MaxInt32) {
|
||||
return nil
|
||||
}
|
||||
return int(value)
|
||||
case *uint64:
|
||||
return ToInt(*value)
|
||||
case float32:
|
||||
if value < float32(math.MinInt32) || value > float32(math.MaxInt32) {
|
||||
return nil
|
||||
}
|
||||
return int(value)
|
||||
case *float32:
|
||||
return ToInt(*value)
|
||||
case float64:
|
||||
if value < float64(math.MinInt32) || value > float64(math.MaxInt32) {
|
||||
return nil
|
||||
}
|
||||
return int(value)
|
||||
case *float64:
|
||||
return ToInt(*value)
|
||||
case string:
|
||||
val, err := strconv.ParseFloat(value, 0)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return ToInt(val)
|
||||
case *string:
|
||||
return ToInt(*value)
|
||||
}
|
||||
|
||||
// If the value cannot be transformed into an int, return nil instead of '0'
|
||||
// to denote 'no integer found'
|
||||
return nil
|
||||
}
|
||||
|
||||
// ToFloat convert any type to float
|
||||
func ToFloat(value interface{}) interface{} {
|
||||
switch value := value.(type) {
|
||||
case bool:
|
||||
if value == true {
|
||||
return 1.0
|
||||
}
|
||||
return 0.0
|
||||
case *bool:
|
||||
return ToFloat(*value)
|
||||
case int:
|
||||
return float64(value)
|
||||
case *int32:
|
||||
return ToFloat(*value)
|
||||
case float32:
|
||||
return value
|
||||
case *float32:
|
||||
return ToFloat(*value)
|
||||
case float64:
|
||||
return value
|
||||
case *float64:
|
||||
return ToFloat(*value)
|
||||
case string:
|
||||
val, err := strconv.ParseFloat(value, 0)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return val
|
||||
case *string:
|
||||
return ToFloat(*value)
|
||||
}
|
||||
return 0.0
|
||||
}
|
||||
Reference in New Issue
Block a user