diff options
Diffstat (limited to 'src/mongo/gotools/common/util/bool.go')
-rw-r--r-- | src/mongo/gotools/common/util/bool.go | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/mongo/gotools/common/util/bool.go b/src/mongo/gotools/common/util/bool.go new file mode 100644 index 00000000000..d49a8483b9e --- /dev/null +++ b/src/mongo/gotools/common/util/bool.go @@ -0,0 +1,32 @@ +package util + +import ( + "gopkg.in/mgo.v2/bson" + "reflect" +) + +// IsTruthy returns true for values the server will interpret as "true". +// True values include {}, [], "", true, and any numbers != 0 +func IsTruthy(val interface{}) bool { + if val == nil { + return false + } + if val == bson.Undefined { + return false + } + + v := reflect.ValueOf(val) + switch v.Kind() { + case reflect.Map, reflect.Slice, reflect.Array, reflect.String, reflect.Struct: + return true + default: + z := reflect.Zero(v.Type()) + return v.Interface() != z.Interface() + } +} + +// IsFalsy returns true for values the server will interpret as "false". +// False values include numbers == 0, false, and nil +func IsFalsy(val interface{}) bool { + return !IsTruthy(val) +} |