34 lines
711 B
Go
34 lines
711 B
Go
package util
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
type ValueSlice []reflect.Value
|
|
|
|
func (vs ValueSlice) Len() int { return len(vs) }
|
|
func (vs ValueSlice) Less(i, j int) bool { return vs[i].String() < vs[j].String() }
|
|
func (vs ValueSlice) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] }
|
|
|
|
func (vs ValueSlice) Equal(other ValueSlice) bool {
|
|
sort.Sort(other)
|
|
for i, key := range vs {
|
|
if other[i].String() != key.String() {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func (vs ValueSlice) String() string {
|
|
vals := make([]string, vs.Len())
|
|
for i, key := range vs {
|
|
vals[i] = fmt.Sprintf("%q", key.String())
|
|
}
|
|
sort.Strings(vals)
|
|
return fmt.Sprintf("[%s]", strings.Join(vals, ","))
|
|
}
|