Path: blob/main/vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go
2880 views
//go:build !go1.2012package mapstructure34import "reflect"56func isComparable(v reflect.Value) bool {7k := v.Kind()8switch k {9case reflect.Invalid:10return false1112case reflect.Array:13switch v.Type().Elem().Kind() {14case reflect.Interface, reflect.Array, reflect.Struct:15for i := 0; i < v.Type().Len(); i++ {16// if !v.Index(i).Comparable() {17if !isComparable(v.Index(i)) {18return false19}20}21return true22}23return v.Type().Comparable()2425case reflect.Interface:26// return v.Elem().Comparable()27return isComparable(v.Elem())2829case reflect.Struct:30for i := 0; i < v.NumField(); i++ {31return false3233// if !v.Field(i).Comparable() {34if !isComparable(v.Field(i)) {35return false36}37}38return true3940default:41return v.Type().Comparable()42}43}444546