59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
|
package common_utils
|
||
|
|
||
|
import (
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// Converts all the types in
|
||
|
func ConvertArr[Tin any, Tout any](in []Tin, convertFunc CovertFunc[Tin, Tout]) (convertedItems []Tout, err error) {
|
||
|
out := make([]Tout, len(in))
|
||
|
for i, item := range in {
|
||
|
outItem, err := convertFunc(item)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
out[i] = outItem
|
||
|
}
|
||
|
return out, nil
|
||
|
}
|
||
|
|
||
|
// More modern approach to parsing integers and floats using generics
|
||
|
|
||
|
func MustStr2Int[T Int](str string, base int, bitSize int) T {
|
||
|
int, err := strconv.ParseInt(str, base, bitSize)
|
||
|
if err != nil {
|
||
|
panic("Error while trying to convert string to integer: " + err.Error())
|
||
|
}
|
||
|
return T(int)
|
||
|
}
|
||
|
|
||
|
func Str2Int[T Int](str string, base int, bitSize int) (T, error) {
|
||
|
out, err := strconv.ParseInt(str, base, bitSize)
|
||
|
return T(out), err
|
||
|
}
|
||
|
|
||
|
func MustStr2Float[T Float](str string, bitSize int) T {
|
||
|
out, err := strconv.ParseFloat(str, bitSize)
|
||
|
if err != nil {
|
||
|
panic("Error while trying to convert string to float: " + err.Error())
|
||
|
}
|
||
|
return T(out)
|
||
|
}
|
||
|
|
||
|
func Str2Float[T Float](str string, bitSize int) (T, error) {
|
||
|
out, err := strconv.ParseFloat(str, bitSize)
|
||
|
return T(out), err
|
||
|
}
|
||
|
|
||
|
func Str2Bool(str string) (val bool, ok bool) {
|
||
|
switch strings.ToLower(str) {
|
||
|
case "true", "yes", "y", "t", "1":
|
||
|
return true, true
|
||
|
case "false", "no", "n", "f", "0":
|
||
|
return false, true
|
||
|
default:
|
||
|
return false, false
|
||
|
}
|
||
|
}
|