Documentation ¶
Index ¶
- func UndValidate[T validate.UndValidator](u Und[T]) error
- type SqlNull
- type Und
- func Defined[T any](t T) Und[T]
- func FromOption[T any](opt option.Option[option.Option[T]]) Und[T]
- func FromPointer[T any](v *T) Und[T]
- func FromSqlNull[T any](v sql.Null[T]) Und[T]
- func FromUnd[T any](u und.Und[T]) Und[T]
- func Map[T, U any](u Und[T], f func(t T) U) Und[U]
- func Null[T any]() Und[T]
- func Undefined[T any]() Und[T]
- func WrapPointer[T any](t *T) Und[*T]
- func (u Und[T]) Clone() Und[T]
- func (u Und[T]) DoublePointer() **T
- func (u Und[T]) Equal(other Und[T]) bool
- func (u Und[T]) EqualFunc(other Und[T], cmp func(i, j T) bool) bool
- func (u Und[T]) IsDefined() bool
- func (u Und[T]) IsNull() bool
- func (u Und[T]) IsUndefined() bool
- func (u Und[T]) IsZero() bool
- func (u Und[T]) Iter() iter.Seq[option.Option[T]]
- func (u Und[T]) LogValue() slog.Value
- func (u Und[T]) Map(f func(option.Option[option.Option[T]]) option.Option[option.Option[T]]) Und[T]
- func (u Und[T]) MarshalJSON() ([]byte, error)
- func (u Und[T]) MarshalJSONV2(enc *jsontext.Encoder, opts jsonv2.Options) error
- func (o Und[T]) MarshalXML(e *xml.Encoder, start xml.StartElement) error
- func (u Und[T]) Pointer() *T
- func (u Und[T]) SqlNull() sql.Null[T]
- func (u Und[T]) Und() und.Und[T]
- func (u Und[T]) UndCheck() error
- func (u Und[T]) UndValidate() error
- func (u *Und[T]) UnmarshalJSON(data []byte) error
- func (u *Und[T]) UnmarshalJSONV2(dec *jsontext.Decoder, opts jsonv2.Options) error
- func (o *Und[T]) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
- func (u Und[T]) Unwrap() option.Option[option.Option[T]]
- func (u Und[T]) Value() T
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func UndValidate ¶
func UndValidate[T validate.UndValidator](u Und[T]) error
Types ¶
type SqlNull ¶
SqlNull[T] adapts Und[T] to sql.Scanner and driver.Valuer.
func (*SqlNull[T]) Scan ¶
Scan implements sql.Scanner.
If T or *T implements sql.Scanner, the implementation is used. Otherwise, SqlNull[T] falls back to sql.Null[T] as sql.Scanner.
type Und ¶
Und[T] is a type that can express a value (`T`), empty (`null`), or absent (`undefined`).
Und[T] can be a omittable struct field with omitempty option of `encoding/json`.
Although it exposes its internal data structure, you should not mutate internal data. Using map[T]U, []T or json.RawMessage as base type is only allowed hacks to make it omittable by `json:",omitempty" option, without losing freedom of adding methods. Any method implemented on Und[T] assumes it has only either 0 or 1 element. So mutating an Und[T] object, e.g. appending it to have 2 or more elements, causes undefined behaviors and not promised to behave same between versions.
Und[T] is intended to behave much like a simple variable. There are only 2 way to change its internal state. Assigning a value of corresponding state to the variable you intend to change. Or calling UnmarshalJSON on an addressable Und[T].
func FromOption ¶
FromOptions converts opt into an Und[T]. opt is retained by the returned value.
func FromPointer ¶
FromPointer converts *T into Und[T]. If v is nil, it returns an undefined Und. Otherwise, it returns Defined[T] whose value is the dereferenced v.
If you need to keep t as pointer, use WrapPointer instead.
func FromSqlNull ¶
FromSqlNull converts a valid sql.Null[T] to a defined Und[T] and invalid one into a null Und[].
func WrapPointer ¶
WrapPointer converts *T into Und[*T]. The und value is defined if t is non nil, undefined otherwise.
If you want t to be dereferenced, use FromPointer instead.
func (Und[T]) DoublePointer ¶
func (u Und[T]) DoublePointer() **T
DoublePointer returns nil if u is undefined, &(*T)(nil) if null, the internal value if defined.
func (Und[T]) Equal ¶
Equal implements Equality[Und[T]]. Equal panics if T is uncomparable and does not implement Equality[T].
func (Und[T]) EqualFunc ¶
EqualFunc reports whether two Und values are equal. EqualFunc checks state of both. If both state does not match, it returns false. If both are "defined" state, then checks equality of their value by cmp, then returns true if they are equal.
func (Und[T]) IsDefined ¶
IsDefined returns true if u contains a value. Through this method, you can check validity of the value returned from Value method.
func (Und[T]) IsUndefined ¶
IsUndefined returns true if u is an undefined value, otherwise false.
func (Und[T]) IsZero ¶
IsZero is an alias for IsUndefined. Using `json:",omitzero"` option with "github.com/go-json-experiment/json" omits this field while encoding if IsZero returns true.
func (Und[T]) Iter ¶
Iter returns an iterator over the internal option. If u is undefined, the iterator yields nothing, otherwise the internal option.
func (Und[T]) MarshalJSON ¶
MarshalJSON implements json.Marshaler.
func (Und[T]) MarshalJSONV2 ¶
MarshalJSONV2 implements jsonv2.MarshalerV2.
func (Und[T]) MarshalXML ¶
MarshalXML implements xml.Marshaler.
func (Und[T]) Pointer ¶
func (u Und[T]) Pointer() *T
Pointer returns u's internal value as a pointer.
func (Und[T]) UndValidate ¶
func (*Und[T]) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler.
func (*Und[T]) UnmarshalJSONV2 ¶
UnmarshalJSONV2 implements jsonv2.UnmarshalerV2.
func (*Und[T]) UnmarshalXML ¶
UnmarshalXML implements xml.Unmarshaler.