From a720c2c16b442b668db465fbbc70740cfc7ddee4 Mon Sep 17 00:00:00 2001 From: Keuin Date: Thu, 8 Sep 2022 00:31:26 +0800 Subject: Load config from file or cli. --- common/orelse.go | 49 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) (limited to 'common') diff --git a/common/orelse.go b/common/orelse.go index a96bde7..29e3dc7 100644 --- a/common/orelse.go +++ b/common/orelse.go @@ -1,20 +1,61 @@ package common -type Opt[T any] struct { +import "reflect" + +type Opt[T any] interface { + OrElse(thing T) T +} + +type OptError[T any] struct { thing T err error } -func Optional[T any](thing T, err error) Opt[T] { - return Opt[T]{ +type OptNull[T any] struct { + ptr *T +} + +type OptZero[T any] struct { + thing T +} + +func (o OptNull[T]) OrElse(thing T) T { + if o.ptr != nil { + return *o.ptr + } + return thing +} + +func Errorable[T any](thing T, err error) Opt[T] { + return OptError[T]{ thing: thing, err: err, } } -func (o Opt[T]) OrElse(thing T) T { +func (o OptError[T]) OrElse(thing T) T { if o.err != nil { return thing } return o.thing } + +func Nullable[T any](ptr *T) Opt[T] { + return OptNull[T]{ + ptr: ptr, + } +} + +func Zeroable[T any](thing T) Opt[T] { + return OptZero[T]{ + thing: thing, + } +} + +func (o OptZero[T]) OrElse(thing T) T { + var zero T + if reflect.DeepEqual(zero, o.thing) { + return thing + } + return o.thing +} -- cgit v1.2.3