option

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Jun 13, 2023 License: MIT Imports: 9 Imported by: 1

README

github.com/typomaker/option

Optional type for the Golang. A generic value wrapper that adds two additional value representations:

  • Zero - Same as undefined. Basic value state, persists until None or Some value is assigned.
  • None - Same as null. A logically explicit absence of a value.
  • Some - Usual value representation.

Usage

Value initialization
import "github.com/typomaker/option"
var value option.Option[string]{}
if value.IsZero() { // if value is undefined.
    value = option.Some("foo") // then define it using Some[string](...).
}
if value.IsSome() { // if value is defined and not null
    value = option.None[string]() // then set it null using None[string]() 
}
if value.IsNone() { // if value is defined and null
    value = option.Option[string]{} // then undefine it with the zero Option struct.
}

Value getting
import "github.com/typomaker/option"
var value option.Option[string]{}

value.Get() // returns value if defined not null, otherwise panics.
value.GetOrZero() // always returns value, if undefined or null then zero value.
value.GetOrFunc(func() string {return "fallback"}) // returns a value if defined not null. otherwise, returns the result of the passed function.

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetOf

func GetOf[T any](op ...Option[T]) T

GetOf returns value of first some value. If there are no some value, then return zero value.

func IsNone

func IsNone(nn ...Noneable) (ok bool)

IsNone returns a true if all passed values is none.

func IsSome

func IsSome(ss ...Someable) (ok bool)

IsSome returns a true if all passed values is some.

func IsZero

func IsZero(zz ...Zeroable) (ok bool)

IsZero returns a true if all passed values is zero.

func PickOf

func PickOf[T any](op ...Option[T]) []T

PickOf returns all some values.

Types

type Bool

type Bool = Option[bool]

type Complex64

type Complex64 = Option[complex64]

type Complex128

type Complex128 = Option[complex128]

type Duration

type Duration = Option[time.Duration]

type Float32

type Float32 = Option[float32]

type Float64

type Float64 = Option[float64]

type Int

type Int = Option[int]

type Int8

type Int8 = Option[int8]

type Int16

type Int16 = Option[int16]

type Int32

type Int32 = Option[int32]

type Int64

type Int64 = Option[int64]

type Noneable

type Noneable interface{ IsNone() bool }

type Option

type Option[T any] struct {
	// contains filtered or unexported fields
}
Example (States)
var value option.Option[string]
fmt.Println("value is zero, same as undefined:", value.IsZero())

value = option.None[string]()
fmt.Println("value is none, defined and same as null:", value.IsNone())

value = option.Some[string]("hello world")
fmt.Println("value is some, defined and not null:", value.IsSome())
Output:

value is zero, same as undefined: true
value is none, defined and same as null: true
value is some, defined and not null: true

func Maybe

func Maybe[T any](value T) Option[T]

Maybe returns some if the value is non zero and nil.

Example:
	log.Println(Maybe(0)) // None[int]()
	log.Println(Maybe(1)) // Some[int](1)
	log.Println(Maybe((*string)(nil))) // None[*string]()
	ptr := "foo"
	log.Println(Maybe(&ptr)) // Some[*string](foo)

func Nil

func Nil[T any](v *T) Option[T]

func None

func None[T any]() Option[T]

func Some

func Some[T any](v T) Option[T]

func SomeOf

func SomeOf[T any](op ...Option[T]) Option[T]

SomeOf returns first some option. If there are no some options, then returns none value.

func (Option[T]) Get

func (o Option[T]) Get() T

Get returns a value if it some, in other case panics.

func (Option[T]) GetOr

func (o Option[T]) GetOr(value T) T

GetOr returns the value if the option is none.

Example
fmt.Println("none", option.None[int]().GetOr(1))
fmt.Println("some", option.Some(2).GetOr(1))
fmt.Println("zero", option.Option[int]{}.GetOr(3))
Output:

none 1
some 2
zero 3

func (Option[T]) GetOrFunc

func (o Option[T]) GetOrFunc(getter func() T) T

GetOrFunc retunrs value from getter if the option is none

Example
fmt.Println("none", option.None[int]().GetOrFunc(func() int { return 1 }))
fmt.Println("some", option.Some(2).GetOrFunc(func() int { return 1 }))
fmt.Println("zero", option.Option[int]{}.GetOrFunc(func() int { return 3 }))
Output:

none 1
some 2
zero 3

func (Option[T]) GetOrNil

func (o Option[T]) GetOrNil() *T

GetOrNil returns the nil value if the option is none. Pointer is refers to a copy of the origin value, so that means any changes to the pointer don't affect the value of the option.

Example
fmt.Println("none", option.None[int]().GetOrNil())
fmt.Printf("some %v\n", *option.Some("1").GetOrNil())
fmt.Println("zero", option.Option[int]{}.GetOrNil())
Output:

none <nil>
some 1
zero <nil>

func (Option[T]) GetOrZero

func (o Option[T]) GetOrZero() T

GetOrZero returns the zero value if the option is none.

Example
fmt.Println("none", option.None[int]().GetOrZero())
fmt.Println("some", option.Some(1).GetOrZero())
fmt.Println("zero", option.Option[int]{}.GetOrZero())
Output:

none 0
some 1
zero 0

func (Option[T]) GoString

func (o Option[T]) GoString() string

func (Option[T]) IsNone

func (o Option[T]) IsNone() bool

IsNone returns a true if value is none.

func (Option[T]) IsSome

func (o Option[T]) IsSome() bool

IsNone returns a true if value is some.

func (Option[T]) IsZero

func (o Option[T]) IsZero() bool

IsZero returns a true if value is zero.

func (Option[T]) MarshalJSON

func (o Option[T]) MarshalJSON() (b []byte, err error)

MarshalJSON is a implementation of the json.Marshaler.

func (Option[T]) String

func (o Option[T]) String() string

func (*Option[T]) UnmarshalJSON

func (o *Option[T]) UnmarshalJSON(b []byte) (err error)

UnmarshalJSON is a implementation of the json.Unmarshaler.

type Someable

type Someable interface{ IsSome() bool }

type String

type String = Option[string]

type Time

type Time = Option[time.Time]

type Uint

type Uint = Option[uint]

type Uint8

type Uint8 = Option[uint8]

type Uint16

type Uint16 = Option[uint16]

type Uint32

type Uint32 = Option[uint32]

type Uint64

type Uint64 = Option[uint64]

type Zeroable

type Zeroable interface{ IsZero() bool }

Jump to

Keyboard shortcuts

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