88 lines
1.8 KiB
Go
88 lines
1.8 KiB
Go
package gen
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"sort"
|
|
|
|
"github.com/spf13/cast"
|
|
)
|
|
|
|
func min(a, b int) int {
|
|
if a < b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|
|
|
|
func sortDedupStrings(in []string) []string {
|
|
sort.Strings(in)
|
|
j := 0
|
|
for i := 1; i < len(in); i++ {
|
|
if in[j] == in[i] {
|
|
continue
|
|
}
|
|
j++
|
|
in[j] = in[i]
|
|
}
|
|
return in[:j+1]
|
|
}
|
|
|
|
// ToInt64SliceE casts an interface to a []int64 type.
|
|
func toInt64SliceE(i interface{}) ([]int64, error) {
|
|
if i == nil {
|
|
return []int64{}, fmt.Errorf("unable to cast %#v of type %T to []int64", i, i)
|
|
}
|
|
|
|
switch v := i.(type) {
|
|
case []int64:
|
|
return v, nil
|
|
}
|
|
|
|
kind := reflect.TypeOf(i).Kind()
|
|
switch kind {
|
|
case reflect.Slice, reflect.Array:
|
|
s := reflect.ValueOf(i)
|
|
a := make([]int64, s.Len())
|
|
for j := 0; j < s.Len(); j++ {
|
|
val, err := cast.ToInt64E(s.Index(j).Interface())
|
|
if err != nil {
|
|
return []int64{}, fmt.Errorf("unable to cast %#v of type %T to []int64", i, i)
|
|
}
|
|
a[j] = val
|
|
}
|
|
return a, nil
|
|
default:
|
|
return []int64{}, fmt.Errorf("unable to cast %#v of type %T to []int64", i, i)
|
|
}
|
|
}
|
|
|
|
// ToFloat64SliceE casts an interface to a []float64 type.
|
|
func toFloat64SliceE(i interface{}) ([]float64, error) {
|
|
if i == nil {
|
|
return []float64{}, fmt.Errorf("unable to cast %#v of type %T to []float64", i, i)
|
|
}
|
|
|
|
switch v := i.(type) {
|
|
case []float64:
|
|
return v, nil
|
|
}
|
|
|
|
kind := reflect.TypeOf(i).Kind()
|
|
switch kind {
|
|
case reflect.Slice, reflect.Array:
|
|
s := reflect.ValueOf(i)
|
|
a := make([]float64, s.Len())
|
|
for j := 0; j < s.Len(); j++ {
|
|
val, err := cast.ToFloat64E(s.Index(j).Interface())
|
|
if err != nil {
|
|
return []float64{}, fmt.Errorf("unable to cast %#v of type %T to []float64", i, i)
|
|
}
|
|
a[j] = val
|
|
}
|
|
return a, nil
|
|
default:
|
|
return []float64{}, fmt.Errorf("unable to cast %#v of type %T to []float64", i, i)
|
|
}
|
|
}
|