Documentation
¶
Index ¶
- type Und
- 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]) IsDefined() bool
- func (u Und[T]) IsNull() bool
- func (u Und[T]) IsUndefined() bool
- func (u Und[T]) IsZero() bool
- func (o 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 (o Und[T]) SqlNull() sql.Null[T]
- 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 ¶
This section is empty.
Types ¶
type Und ¶
Und[T] is a type that can express a value (`T`), empty (`null`), or absent (`undefined`).
Und[T] can be a skippable 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 skippable 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.
func FromSqlNull ¶
FromSqlNull converts a valid sql.Null[T] to a defined Und[T] and invalid one into a null Und[].
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]) 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" skips this field while encoding if IsZero returns true.
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]) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler.
func (*Und[T]) UnmarshalJSONV2 ¶
UnmarshalJSONV2 implements jsonv2.UnmarshalerV2.
func (*Und[T]) UnmarshalXML ¶
UnmarshalXML implements xml.Unmarshaler.