Blame vendor/github.com/kr/pretty/zero.go

Packit 63bb0d
package pretty
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"reflect"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
func nonzero(v reflect.Value) bool {
Packit 63bb0d
	switch v.Kind() {
Packit 63bb0d
	case reflect.Bool:
Packit 63bb0d
		return v.Bool()
Packit 63bb0d
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
Packit 63bb0d
		return v.Int() != 0
Packit 63bb0d
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
Packit 63bb0d
		return v.Uint() != 0
Packit 63bb0d
	case reflect.Float32, reflect.Float64:
Packit 63bb0d
		return v.Float() != 0
Packit 63bb0d
	case reflect.Complex64, reflect.Complex128:
Packit 63bb0d
		return v.Complex() != complex(0, 0)
Packit 63bb0d
	case reflect.String:
Packit 63bb0d
		return v.String() != ""
Packit 63bb0d
	case reflect.Struct:
Packit 63bb0d
		for i := 0; i < v.NumField(); i++ {
Packit 63bb0d
			if nonzero(getField(v, i)) {
Packit 63bb0d
				return true
Packit 63bb0d
			}
Packit 63bb0d
		}
Packit 63bb0d
		return false
Packit 63bb0d
	case reflect.Array:
Packit 63bb0d
		for i := 0; i < v.Len(); i++ {
Packit 63bb0d
			if nonzero(v.Index(i)) {
Packit 63bb0d
				return true
Packit 63bb0d
			}
Packit 63bb0d
		}
Packit 63bb0d
		return false
Packit 63bb0d
	case reflect.Map, reflect.Interface, reflect.Slice, reflect.Ptr, reflect.Chan, reflect.Func:
Packit 63bb0d
		return !v.IsNil()
Packit 63bb0d
	case reflect.UnsafePointer:
Packit 63bb0d
		return v.Pointer() != 0
Packit 63bb0d
	}
Packit 63bb0d
	return true
Packit 63bb0d
}