null

package
v0.0.0-...-338d04d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 8, 2024 License: MIT Imports: 7 Imported by: 4

Documentation

Overview

Package null exposes a Val(ue) type that wraps a regular value with the ability to be 'null'.

Index

Constants

View Source
const (
	StateNull state = 0
	StateSet  state = 1
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Val

type Val[T any] struct {
	// contains filtered or unexported fields
}

Val allows representing a value with a state of "null" or "set". Its zero value is usfel and initially "null".

func From

func From[T any](val T) Val[T]

From a value which is considered 'set'

func FromCond

func FromCond[T any](val T, ok bool) Val[T]

FromCond conditionally creates a 'set' value if the bool is true, else it will return a null value.

func FromPtr

func FromPtr[T any](val *T) Val[T]

FromPtr creates a value from a pointer, if the pointer is null it will be 'null', if it has a value the deferenced value is stored.

func Map

func Map[A any, B any](v Val[A], fn func(A) B) Val[B]

Map transforms the value inside if it is set, else it returns a value of the same state.

func (Val[T]) Get

func (v Val[T]) Get() (T, bool)

Get the underlying value, if one exists.

func (Val[T]) GetOr

func (v Val[T]) GetOr(fallback T) T

GetOr gets the value or returns a fallback if the value does not exist.

func (Val[T]) GetOrZero

func (v Val[T]) GetOrZero() T

GetOrZero returns the zero value for T if the value was omitted.

func (Val[T]) IsNull

func (v Val[T]) IsNull() bool

IsNull returns true if v contains a null value

func (Val[T]) IsSet

func (v Val[T]) IsSet() bool

IsSet returns true if v contains a non-null value

func (Val[T]) Map

func (v Val[T]) Map(fn func(T) T) Val[T]

Map transforms the value inside if it is set, else it returns a value of the same state.

Until a later Go version adds type parameters to methods, it is not possible to map to a different type. See the non-method function Map if you need another type.

func (Val[T]) MarshalJSON

func (v Val[T]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler.

func (Val[T]) MarshalText

func (v Val[T]) MarshalText() ([]byte, error)

MarshalText implements encoding.TextMarshaler.

func (Val[T]) MustGet

func (v Val[T]) MustGet() T

MustGet retrieves the value or panics if it's null

func (*Val[T]) Null

func (v *Val[T]) Null()

Null sets the value to null (state is set to 'null')

func (Val[T]) Or

func (v Val[T]) Or(other Val[T]) Val[T]

Or returns v or other depending on their states. In general set > null > unset and therefore the one with the state highest in that area will win out.

v     | other | result
------------- | -------
set   | _     | v
null  | set   | other
null  | null  | v

func (Val[T]) Ptr

func (v Val[T]) Ptr() *T

Ptr returns a pointer to the value, or nil if null.

func (*Val[T]) Scan

func (v *Val[T]) Scan(value any) error

Scan implements the sql.Scanner interface. If the wrapped type implements sql.Scanner then it will call that.

func (*Val[T]) Set

func (v *Val[T]) Set(val T)

Set the value (and the state to 'set')

func (*Val[T]) SetPtr

func (v *Val[T]) SetPtr(val *T)

SetPtr sets the value to (value, set) if val is non-nil or (??, null) if not. The value is dereferenced before stored.

func (Val[T]) State

func (v Val[T]) State() state

State retrieves the internal state, mostly useful for testing.

func (*Val[T]) UnmarshalJSON

func (v *Val[T]) UnmarshalJSON(data []byte) error

UnmarshalJSON implements json.Unmarshaler

func (*Val[T]) UnmarshalText

func (v *Val[T]) UnmarshalText(text []byte) error

UnmarshalText implements encoding.TextUnmarshaler.

func (Val[T]) Value

func (v Val[T]) Value() (driver.Value, error)

Value implements the driver.Valuer interface. If the underlying type implements the driver.Valuer it will call that (when not null). Go primitive types will be converted where possible.

int64
float64
bool
[]byte
string
time.Time

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL