76 lines
1.1 KiB
Go
76 lines
1.1 KiB
Go
package sqlType
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"encoding/json"
|
|
|
|
"github.com/jackc/pgtype"
|
|
)
|
|
|
|
type JSONB struct {
|
|
Val pgtype.JSONB
|
|
Valid bool
|
|
}
|
|
|
|
func NewJSONB(v interface{}) JSONB {
|
|
j := new(JSONB)
|
|
j.Val = pgtype.JSONB{}
|
|
if err := j.Val.Set(v); err == nil {
|
|
j.Valid = true
|
|
return *j
|
|
}
|
|
|
|
return *j
|
|
}
|
|
|
|
func (j *JSONB) Set(value interface{}) error {
|
|
if err := j.Val.Set(value); err != nil {
|
|
j.Valid = false
|
|
return err
|
|
}
|
|
|
|
j.Valid = true
|
|
|
|
return nil
|
|
}
|
|
|
|
func (j *JSONB) Bind(model interface{}) error {
|
|
return j.Val.AssignTo(model)
|
|
}
|
|
|
|
func (j *JSONB) Scan(value interface{}) error {
|
|
j.Val = pgtype.JSONB{}
|
|
if value == nil {
|
|
j.Valid = false
|
|
return nil
|
|
}
|
|
|
|
j.Valid = true
|
|
|
|
return j.Val.Scan(value)
|
|
}
|
|
|
|
func (j JSONB) Value() (driver.Value, error) {
|
|
if j.Valid {
|
|
return j.Val.Value()
|
|
}
|
|
|
|
return nil, nil
|
|
}
|
|
|
|
func (j JSONB) MarshalJSON() ([]byte, error) {
|
|
if j.Valid {
|
|
return j.Val.MarshalJSON()
|
|
}
|
|
|
|
return json.Marshal(nil)
|
|
}
|
|
|
|
func (j *JSONB) UnmarshalJSON(b []byte) error {
|
|
if string(b) == "null" {
|
|
j.Valid = false
|
|
return j.Val.UnmarshalJSON(b)
|
|
}
|
|
|
|
return j.Val.UnmarshalJSON(b)
|
|
} |