mirror of https://github.com/jackc/pgx.git
69 lines
1.1 KiB
Go
69 lines
1.1 KiB
Go
package pgtype
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
type Jsonb Json
|
|
|
|
func (dst *Jsonb) Set(src interface{}) error {
|
|
return (*Json)(dst).Set(src)
|
|
}
|
|
|
|
func (dst *Jsonb) Get() interface{} {
|
|
return (*Json)(dst).Get()
|
|
}
|
|
|
|
func (src *Jsonb) AssignTo(dst interface{}) error {
|
|
return (*Json)(src).AssignTo(dst)
|
|
}
|
|
|
|
func (dst *Jsonb) DecodeText(src []byte) error {
|
|
return (*Json)(dst).DecodeText(src)
|
|
}
|
|
|
|
func (dst *Jsonb) DecodeBinary(src []byte) error {
|
|
if src == nil {
|
|
*dst = Jsonb{Status: Null}
|
|
return nil
|
|
}
|
|
|
|
if len(src) == 0 {
|
|
return fmt.Errorf("jsonb too short")
|
|
}
|
|
|
|
if src[0] != 1 {
|
|
return fmt.Errorf("unknown jsonb version number %d", src[0])
|
|
}
|
|
src = src[1:]
|
|
|
|
buf := make([]byte, len(src))
|
|
copy(buf, src)
|
|
|
|
*dst = Jsonb{Bytes: buf, Status: Present}
|
|
return nil
|
|
|
|
}
|
|
|
|
func (src Jsonb) EncodeText(w io.Writer) (bool, error) {
|
|
return (Json)(src).EncodeText(w)
|
|
}
|
|
|
|
func (src Jsonb) EncodeBinary(w io.Writer) (bool, error) {
|
|
switch src.Status {
|
|
case Null:
|
|
return true, nil
|
|
case Undefined:
|
|
return false, errUndefined
|
|
}
|
|
|
|
_, err := w.Write([]byte{1})
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
_, err = w.Write(src.Bytes)
|
|
return false, err
|
|
}
|