summaryrefslogtreecommitdiff
path: root/vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go')
-rw-r--r--vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go b/vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go
new file mode 100644
index 000000000..d0913fff6
--- /dev/null
+++ b/vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go
@@ -0,0 +1,44 @@
+//go:build !go1.20
+
+package mapstructure
+
+import "reflect"
+
+func isComparable(v reflect.Value) bool {
+ k := v.Kind()
+ switch k {
+ case reflect.Invalid:
+ return false
+
+ case reflect.Array:
+ switch v.Type().Elem().Kind() {
+ case reflect.Interface, reflect.Array, reflect.Struct:
+ for i := 0; i < v.Type().Len(); i++ {
+ // if !v.Index(i).Comparable() {
+ if !isComparable(v.Index(i)) {
+ return false
+ }
+ }
+ return true
+ }
+ return v.Type().Comparable()
+
+ case reflect.Interface:
+ // return v.Elem().Comparable()
+ return isComparable(v.Elem())
+
+ case reflect.Struct:
+ for i := 0; i < v.NumField(); i++ {
+ return false
+
+ // if !v.Field(i).Comparable() {
+ if !isComparable(v.Field(i)) {
+ return false
+ }
+ }
+ return true
+
+ default:
+ return v.Type().Comparable()
+ }
+}