mirror of
https://github.com/writeas/web-core
synced 2018-07-20 11:55:21 +00:00
Add JSON and SQL converters for gorilla/schema
This commit is contained in:
parent
b150adf2e1
commit
e994cb9bf8
82
converter/json.go
Normal file
82
converter/json.go
Normal file
@ -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
|
||||
}
|
42
converter/sql.go
Normal file
42
converter/sql.go
Normal file
@ -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)
|
||||
}
|
Loading…
Reference in New Issue
Block a user