Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
kardolus
GitHub Repository: kardolus/chatgpt-cli
Path: blob/main/vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go
2880 views
1
//go:build !go1.20
2
3
package mapstructure
4
5
import "reflect"
6
7
func isComparable(v reflect.Value) bool {
8
k := v.Kind()
9
switch k {
10
case reflect.Invalid:
11
return false
12
13
case reflect.Array:
14
switch v.Type().Elem().Kind() {
15
case reflect.Interface, reflect.Array, reflect.Struct:
16
for i := 0; i < v.Type().Len(); i++ {
17
// if !v.Index(i).Comparable() {
18
if !isComparable(v.Index(i)) {
19
return false
20
}
21
}
22
return true
23
}
24
return v.Type().Comparable()
25
26
case reflect.Interface:
27
// return v.Elem().Comparable()
28
return isComparable(v.Elem())
29
30
case reflect.Struct:
31
for i := 0; i < v.NumField(); i++ {
32
return false
33
34
// if !v.Field(i).Comparable() {
35
if !isComparable(v.Field(i)) {
36
return false
37
}
38
}
39
return true
40
41
default:
42
return v.Type().Comparable()
43
}
44
}
45
46