1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package xorm
- import (
- "encoding/json"
- "fmt"
- "reflect"
- )
- type NullString struct {
- String string
- Valid bool
- }
- func (ns NullString) Ptr() *string {
- if !ns.Valid {
- return nil
- }
- return &ns.String
- }
- func (ns NullString) ValueOrZero() string {
- if !ns.Valid {
- return ""
- }
- return ns.String
- }
- func (ns NullString) IsNil() bool {
- return !ns.Valid
- }
- func (ns *NullString) UnmarshalJSON(data []byte) error {
- var err error
- var v interface{}
- if err = json.Unmarshal(data, &v); err != nil {
- return err
- }
- switch x := v.(type) {
- case string:
- ns.String = x
- case map[string]interface{}:
- err = json.Unmarshal(data, &ns)
- case nil:
- ns.Valid = false
- return nil
- default:
- err = fmt.Errorf("json: cannot unmarshal %v into Go value of type xorm.NullString", reflect.TypeOf(v).Name())
- }
- ns.Valid = err == nil
- return err
- }
- func (ns NullString) MarshalJSON() ([]byte, error) {
- if !ns.Valid {
- return []byte("null"), nil
- }
- return json.Marshal(ns.String)
- }
- func (ns NullString) MarshalText() ([]byte, error) {
- if !ns.Valid {
- return []byte{}, nil
- }
- return []byte(ns.String), nil
- }
- func (ns *NullString) UnmarshalText(text []byte) error {
- ns.String = string(text)
- ns.Valid = ns.String != ""
- return nil
- }
|