summaryrefslogtreecommitdiff
path: root/src/mongo/gotools/common/util/bool.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/gotools/common/util/bool.go')
-rw-r--r--src/mongo/gotools/common/util/bool.go32
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)
+}