2020-05-11 01:14:30 +00:00
|
|
|
package option
|
|
|
|
|
2020-05-11 21:32:22 +00:00
|
|
|
import "strconv"
|
|
|
|
|
2020-05-11 03:24:59 +00:00
|
|
|
// ================================ Uint ================================
|
|
|
|
|
|
|
|
// Uint is the option type for unsigned integers (uint).
|
|
|
|
type Uint *uint
|
|
|
|
|
|
|
|
// ZeroUint is a Uint with 0 as value.
|
|
|
|
var ZeroUint = NewUint(0)
|
2020-05-11 01:14:30 +00:00
|
|
|
|
|
|
|
// NewUint creates a new Uint using the value of the passed uint.
|
2020-05-11 03:24:59 +00:00
|
|
|
func NewUint(u uint) Uint { return &u }
|
|
|
|
|
|
|
|
// ================================ Int ================================
|
|
|
|
|
|
|
|
// Int is the option type for integers (int).
|
|
|
|
type Int *int
|
|
|
|
|
|
|
|
// ZeroInt is an Int with 0 as value.
|
|
|
|
var ZeroInt = NewInt(0)
|
2020-05-11 01:14:30 +00:00
|
|
|
|
|
|
|
// NewInt creates a new Int using the value of the passed int.
|
2020-05-11 03:24:59 +00:00
|
|
|
func NewInt(i int) Int { return &i }
|
2020-05-11 21:32:22 +00:00
|
|
|
|
|
|
|
// ================================ NullableUint ================================
|
|
|
|
|
|
|
|
// NullableUint is a nullable version of an unsigned integer (uint).
|
|
|
|
type NullableUint = *nullableUint
|
|
|
|
|
|
|
|
type nullableUint struct {
|
|
|
|
Val uint
|
|
|
|
Init bool
|
|
|
|
}
|
|
|
|
|
|
|
|
// NullUint serializes to JSON null.
|
|
|
|
var NullUint = &nullableUint{}
|
|
|
|
|
|
|
|
// NewUint creates a new non-null NullableUint using the value of the passed uint.
|
|
|
|
func NewNullableUint(v uint) NullableUint {
|
|
|
|
return &nullableUint{
|
|
|
|
Val: v,
|
|
|
|
Init: true,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (u nullableUint) MarshalJSON() ([]byte, error) {
|
|
|
|
if !u.Init {
|
|
|
|
return []byte("null"), nil
|
|
|
|
}
|
|
|
|
return []byte(strconv.FormatUint(uint64(u.Val), 10)), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (u *nullableUint) UnmarshalJSON(json []byte) error {
|
|
|
|
s := string(json)
|
|
|
|
|
|
|
|
if s == "null" {
|
|
|
|
u.Init = false
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
v, err := strconv.ParseUint(s, 10, 64)
|
|
|
|
|
|
|
|
u.Val = uint(v)
|
|
|
|
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// ================================ NullableInt ================================
|
|
|
|
|
|
|
|
// NullableInt is a nullable version of an integer (int).
|
|
|
|
type NullableInt *nullableInt
|
|
|
|
|
|
|
|
type nullableInt struct {
|
|
|
|
Val int
|
|
|
|
Init bool
|
|
|
|
}
|
|
|
|
|
|
|
|
// NullUint serializes to JSON null.
|
|
|
|
var NullInt = &nullableUint{}
|
|
|
|
|
|
|
|
// NewInt creates a new non-null NullableInt using the value of the passed int.
|
|
|
|
func NewNullableInt(v int) NullableInt {
|
|
|
|
return &nullableInt{
|
|
|
|
Val: v,
|
|
|
|
Init: true,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i nullableInt) MarshalJSON() ([]byte, error) {
|
|
|
|
if !i.Init {
|
|
|
|
return []byte("null"), nil
|
|
|
|
}
|
|
|
|
return []byte(strconv.FormatUint(uint64(i.Val), 10)), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *nullableInt) UnmarshalJSON(json []byte) error {
|
|
|
|
s := string(json)
|
|
|
|
|
|
|
|
if s == "null" {
|
|
|
|
i.Init = false
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
v, err := strconv.ParseUint(s, 10, 64)
|
|
|
|
|
|
|
|
i.Val = int(v)
|
|
|
|
|
|
|
|
return err
|
|
|
|
}
|