optstring.Type and optstring.NullableType
parent
d2aba9b53d
commit
76f546217d
|
@ -0,0 +1,218 @@
|
|||
package optstring
|
||||
|
||||
/*
|
||||
* CODE GENERATED AUTOMATICALLY WITH https://github.com/reiver/gogen-optiontype
|
||||
* THIS FILE SHOULD NOT BE EDITED BY HAND
|
||||
*/
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"database/sql/driver"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
var (
|
||||
errNilReceiver = errors.New("Nil Receiver")
|
||||
errNone = errors.New("optstring.None()")
|
||||
errNoneNullable = errors.New("optstring.NoneNullable()")
|
||||
errNull = errors.New("optstring.Null()")
|
||||
)
|
||||
|
||||
func (receiver *NullableType) Scan(src interface{}) error {
|
||||
if nil == receiver {
|
||||
return errNilReceiver
|
||||
}
|
||||
|
||||
if nil == src {
|
||||
*receiver = Null()
|
||||
return nil
|
||||
}
|
||||
|
||||
switch t := src.(type) {
|
||||
case NullableType:
|
||||
*receiver = t
|
||||
return nil
|
||||
case Type:
|
||||
switch t {
|
||||
case None():
|
||||
*receiver = NoneNullable()
|
||||
default:
|
||||
datum, err := t.String()
|
||||
if nil != err {
|
||||
return fmt.Errorf("Problem unwrapping %T: (%T) %v", t, err, err)
|
||||
}
|
||||
*receiver = SomeNullable(datum)
|
||||
}
|
||||
return nil
|
||||
case string:
|
||||
*receiver = SomeNullable(t)
|
||||
return nil
|
||||
case []byte:
|
||||
s := string(t)
|
||||
*receiver = SomeNullable(s)
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("Cannot scan something of type %T into an %T.", src, *receiver)
|
||||
}
|
||||
}
|
||||
|
||||
func (receiver NullableType) String() (string, error) {
|
||||
if NoneNullable() == receiver {
|
||||
return "", errNoneNullable
|
||||
}
|
||||
if Null() == receiver {
|
||||
return "", errNull
|
||||
}
|
||||
|
||||
return receiver.value, nil
|
||||
}
|
||||
|
||||
type NullableType struct {
|
||||
loaded bool
|
||||
null bool
|
||||
value string
|
||||
}
|
||||
|
||||
func (receiver NullableType) MarshalJSON() ([]byte, error) {
|
||||
if NoneNullable() == receiver {
|
||||
return nil, errNoneNullable
|
||||
}
|
||||
if Null() == receiver {
|
||||
return json.Marshal(nil)
|
||||
}
|
||||
|
||||
return json.Marshal(receiver.value)
|
||||
}
|
||||
|
||||
func (receiver *NullableType) UnmarshalJSON(b []byte) error {
|
||||
if nil == receiver {
|
||||
return errNilReceiver
|
||||
}
|
||||
|
||||
if 0 == bytes.Compare(b, []byte{'n','u','l','l'}) {
|
||||
*receiver = Null()
|
||||
return nil
|
||||
}
|
||||
|
||||
var target string
|
||||
|
||||
if err := json.Unmarshal(b, &target); nil != err {
|
||||
return err
|
||||
}
|
||||
|
||||
*receiver = SomeNullable(target)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (receiver NullableType) Value() (driver.Value, error) {
|
||||
if NoneNullable() == receiver {
|
||||
return nil, errNoneNullable
|
||||
}
|
||||
if Null() == receiver {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return receiver.value, nil
|
||||
}
|
||||
|
||||
func NoneNullable() NullableType {
|
||||
return NullableType{}
|
||||
}
|
||||
|
||||
func SomeNullable(value string) NullableType {
|
||||
return NullableType{
|
||||
value: value,
|
||||
loaded: true,
|
||||
}
|
||||
}
|
||||
|
||||
func Null() NullableType {
|
||||
return NullableType{
|
||||
null: true,
|
||||
loaded: true,
|
||||
}
|
||||
}
|
||||
|
||||
func (receiver *Type) Scan(src interface{}) error {
|
||||
if nil == receiver {
|
||||
return errNilReceiver
|
||||
}
|
||||
|
||||
switch t := src.(type) {
|
||||
case Type:
|
||||
*receiver = t
|
||||
return nil
|
||||
case string:
|
||||
*receiver = Some(t)
|
||||
return nil
|
||||
case []byte:
|
||||
s := string(t)
|
||||
*receiver = Some(s)
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("Cannot scan something of type %T into an %T.", src, *receiver)
|
||||
}
|
||||
}
|
||||
|
||||
func (receiver Type) String() (string, error) {
|
||||
if None() == receiver {
|
||||
return "", errNone
|
||||
}
|
||||
|
||||
return receiver.value, nil
|
||||
}
|
||||
|
||||
type Type struct {
|
||||
loaded bool
|
||||
value string
|
||||
}
|
||||
|
||||
func (receiver Type) MarshalJSON() ([]byte, error) {
|
||||
if None() == receiver {
|
||||
return nil, errNone
|
||||
}
|
||||
|
||||
return json.Marshal(receiver.value)
|
||||
}
|
||||
|
||||
func (receiver *Type) UnmarshalJSON(b []byte) error {
|
||||
if nil == receiver {
|
||||
return errNilReceiver
|
||||
}
|
||||
|
||||
if 0 == bytes.Compare(b, []byte{'n','u','l','l'}) {
|
||||
return fmt.Errorf("Cannot unmarshal %q into %T.", string(b), *receiver)
|
||||
}
|
||||
|
||||
var target string
|
||||
|
||||
if err := json.Unmarshal(b, &target); nil != err {
|
||||
return err
|
||||
}
|
||||
|
||||
*receiver = Some(target)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (receiver Type) Value() (driver.Value, error) {
|
||||
if None() == receiver {
|
||||
return nil, errNone
|
||||
}
|
||||
|
||||
return receiver.value, nil
|
||||
}
|
||||
|
||||
func None() Type {
|
||||
return Type{}
|
||||
}
|
||||
|
||||
func Some(value string) Type {
|
||||
return Type{
|
||||
value: value,
|
||||
loaded: true,
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
package optstring
|
||||
|
||||
//go:generate gogen-optiontype --pkg=optstring --type=string --one-file --no-tests
|
Loading…
Reference in New Issue