Page MenuHomeMusing Studio

No OneTemporary

diff --git a/converter/json.go b/converter/json.go
new file mode 100644
index 0000000..6f4f682
--- /dev/null
+++ b/converter/json.go
@@ -0,0 +1,82 @@
+package converter
+
+import (
+ "database/sql"
+ "encoding/json"
+ "reflect"
+)
+
+type NullJSONBool struct {
+ sql.NullBool
+}
+
+func JSONNullBool(value string) reflect.Value {
+ v := NullJSONBool{}
+
+ if value == "on" || value == "off" {
+ return reflect.ValueOf(NullJSONBool{sql.NullBool{Bool: value == "on", Valid: true}})
+ }
+ if err := v.Scan(value); err != nil {
+ return reflect.Value{}
+ }
+ return reflect.ValueOf(v)
+}
+
+func (v NullJSONBool) MarshalJSON() ([]byte, error) {
+ if v.Valid {
+ return json.Marshal(v.Bool)
+ } else {
+ return json.Marshal(nil)
+ }
+}
+
+func (v *NullJSONBool) UnmarshalJSON(data []byte) error {
+ // Unmarshalling into a pointer will let us detect null
+ var x *bool
+ if err := json.Unmarshal(data, &x); err != nil {
+ return err
+ }
+ if x != nil {
+ v.Valid = true
+ v.Bool = *x
+ } else {
+ v.Valid = false
+ }
+ return nil
+}
+
+type NullJSONString struct {
+ sql.NullString
+}
+
+func JSONNullString(value string) reflect.Value {
+ v := NullJSONString{}
+ if err := v.Scan(value); err != nil {
+ return reflect.Value{}
+ }
+
+ return reflect.ValueOf(v)
+}
+
+func (v NullJSONString) MarshalJSON() ([]byte, error) {
+ if v.Valid {
+ return json.Marshal(v.String)
+ } else {
+ return json.Marshal(nil)
+ }
+}
+
+func (v *NullJSONString) UnmarshalJSON(data []byte) error {
+ // Unmarshalling into a pointer will let us detect null
+ var x *string
+ if err := json.Unmarshal(data, &x); err != nil {
+ return err
+ }
+ if x != nil {
+ v.Valid = true
+ v.String = *x
+ } else {
+ v.Valid = false
+ }
+ return nil
+}
diff --git a/converter/sql.go b/converter/sql.go
new file mode 100644
index 0000000..1992a81
--- /dev/null
+++ b/converter/sql.go
@@ -0,0 +1,42 @@
+package converter
+
+import (
+ "database/sql"
+ "reflect"
+)
+
+func SQLNullString(value string) reflect.Value {
+ v := sql.NullString{}
+ if err := v.Scan(value); err != nil {
+ return reflect.Value{}
+ }
+
+ return reflect.ValueOf(v)
+}
+
+func SQLNullBool(value string) reflect.Value {
+ v := sql.NullBool{}
+ if err := v.Scan(value); err != nil {
+ return reflect.Value{}
+ }
+
+ return reflect.ValueOf(v)
+}
+
+func SQLNullInt64(value string) reflect.Value {
+ v := sql.NullInt64{}
+ if err := v.Scan(value); err != nil {
+ return reflect.Value{}
+ }
+
+ return reflect.ValueOf(v)
+}
+
+func SQLNullFloat64(value string) reflect.Value {
+ v := sql.NullFloat64{}
+ if err := v.Scan(value); err != nil {
+ return reflect.Value{}
+ }
+
+ return reflect.ValueOf(v)
+}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Dec 9, 12:40 PM (9 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3531185

Event Timeline