Browse Source

types/opt: implement Bool.Scan

Signed-off-by: David Crawshaw <[email protected]>
David Crawshaw 4 years ago
parent
commit
45f51d4fa6
1 changed files with 26 additions and 0 deletions
  1. 26 0
      types/opt/bool.go

+ 26 - 0
types/opt/bool.go

@@ -29,6 +29,32 @@ func (b Bool) Get() (v bool, ok bool) {
 	return v, err == nil
 }
 
+// Scan implements database/sql.Scanner.
+func (b *Bool) Scan(src interface{}) error {
+	if src == nil {
+		*b = ""
+		return nil
+	}
+	switch src := src.(type) {
+	case bool:
+		if src {
+			*b = "true"
+		} else {
+			*b = "false"
+		}
+		return nil
+	case int64:
+		if src == 0 {
+			*b = "false"
+		} else {
+			*b = "true"
+		}
+		return nil
+	default:
+		return fmt.Errorf("opt.Bool.Scan: invalid type %T: %v", src, src)
+	}
+}
+
 // EqualBool reports whether b is equal to v.
 // If b is empty or not a valid bool, it reports false.
 func (b Bool) EqualBool(v bool) bool {