Documentation
¶
Index ¶
- func ToError(r VoidResult) error
- func UnwrapErrOr(r VoidResult, def error) error
- type Option
- func AssertOpt[T any](i any) Option[T]
- func BoolAssertOpt[T any](i any, ok bool) Option[T]
- func BoolOpt[T any](value T, ok bool) Option[T]
- func ElemOpt[T any](ptr *T) Option[T]
- func None[T any]() Option[T]
- func PtrOpt[U any, T *U](ptr T) Option[T]
- func RetAnyOpt[T any](value any, err error) Option[any]
- func RetOpt[T any](value T, err error) Option[T]
- func Some[T any](value T) Option[T]
- func ZeroOpt[T comparable](value T) Option[T]
- func (o Option[T]) And(optb Option[T]) Option[T]
- func (o Option[T]) AndThen(f func(T) Option[T]) Option[T]
- func (o *Option[T]) AsPtr() *T
- func (o Option[T]) Expect(msg string) T
- func (o Option[T]) Filter(predicate func(T) bool) Option[T]
- func (o *Option[T]) GetOrInsert(some T) *T
- func (o *Option[T]) GetOrInsertDefault() *T
- func (o *Option[T]) GetOrInsertWith(f func() T) *T
- func (o *Option[T]) Insert(some T) *T
- func (o Option[T]) Inspect(f func(T)) Option[T]
- func (o Option[T]) InspectNone(f func()) Option[T]
- func (o Option[T]) IsNone() bool
- func (o Option[T]) IsSome() bool
- func (o Option[T]) IsSomeAnd(f func(T) bool) bool
- func (o Option[T]) Map(f func(T) T) Option[T]
- func (o Option[T]) MapOr(defaultSome T, f func(T) T) T
- func (o Option[T]) MapOrElse(defaultFn func() T, f func(T) T) T
- func (o Option[T]) MarshalJSON() ([]byte, error)
- func (o *Option[T]) Next() Option[T]
- func (o *Option[T]) NextBack() Option[T]
- func (o Option[T]) OkOr(err any) Result[T]
- func (o Option[T]) OkOrElse(errFn func() any) Result[T]
- func (o Option[T]) Or(optb Option[T]) Option[T]
- func (o Option[T]) OrElse(f func() Option[T]) Option[T]
- func (o Option[T]) Ref() *Option[T]
- func (o *Option[T]) Remaining() uint
- func (o *Option[T]) Replace(some T) (old Option[T])
- func (o *Option[T]) SizeHint() (uint, Option[uint])
- func (o Option[T]) Split() (T, bool)
- func (o Option[T]) String() string
- func (o *Option[T]) Take() Option[T]
- func (o Option[T]) ToResult() VoidResult
- func (o Option[T]) ToX() Option[any]
- func (o *Option[T]) UnmarshalJSON(b []byte) error
- func (o Option[T]) Unwrap() T
- func (o Option[T]) UnwrapOr(fallbackValue T) T
- func (o Option[T]) UnwrapOrDefault() T
- func (o Option[T]) UnwrapOrElse(defaultSome func() T) T
- func (r Option[T]) UnwrapOrThrow(err any) T
- func (o Option[T]) UnwrapUnchecked() T
- func (o Option[T]) XAnd(optb Option[any]) Option[any]
- func (o Option[T]) XAndThen(f func(T) Option[any]) Option[any]
- func (o Option[T]) XMap(f func(T) any) Option[any]
- func (o Option[T]) XMapOr(defaultSome any, f func(T) any) any
- func (o Option[T]) XMapOrElse(defaultFn func() any, f func(T) any) any
- func (o Option[T]) XOkOr(err any) Result[any]
- func (o Option[T]) XOkOrElse(errFn func() any) Result[any]
- func (o Option[T]) Xor(optb Option[T]) Option[T]
- type Result
- func (r Result[T]) And(r2 Result[T]) Result[T]
- func (r Result[T]) And2(v2 T, err2 error) Result[T]
- func (r Result[T]) AndThen(op func(T) Result[T]) Result[T]
- func (r Result[T]) AndThen2(op func(T) (T, error)) Result[T]
- func (r Result[T]) AsPtr() *T
- func (r *Result[T]) Catch(withStackTrace ...bool)
- func (r Result[T]) ContainsErr(err any) bool
- func (r Result[T]) Err() error
- func (r Result[T]) ErrVal() any
- func (r Result[T]) Expect(msg string) T
- func (r Result[T]) ExpectErr(msg string) error
- func (r Result[T]) Flatten(err error) Result[T]
- func (r Result[T]) Inspect(f func(T)) Result[T]
- func (r Result[T]) InspectErr(f func(error)) Result[T]
- func (r Result[T]) IsErr() bool
- func (r Result[T]) IsErrAnd(f func(error) bool) bool
- func (r Result[T]) IsOk() bool
- func (r Result[T]) IsOkAnd(f func(T) bool) bool
- func (r *Result[T]) IsValid() bool
- func (r Result[T]) Map(f func(T) T) Result[T]
- func (r Result[T]) MapErr(op func(error) (newErr any)) Result[T]
- func (r Result[T]) MapOr(defaultOk T, f func(T) T) T
- func (r Result[T]) MapOrElse(defaultFn func(error) T, f func(T) T) T
- func (r Result[T]) MarshalJSON() ([]byte, error)
- func (r *Result[T]) Next() Option[T]
- func (r *Result[T]) NextBack() Option[T]
- func (r Result[T]) Ok() Option[T]
- func (r Result[T]) Or(r2 Result[T]) Result[T]
- func (r Result[T]) Or2(v2 T, err2 error) Result[T]
- func (r Result[T]) OrElse(op func(error) Result[T]) Result[T]
- func (r Result[T]) OrElse2(op func(error) (T, error)) Result[T]
- func (r Result[T]) Ref() *Result[T]
- func (r *Result[T]) Remaining() uint
- func (r *Result[T]) SizeHint() (uint, Option[uint])
- func (r Result[T]) Split() (T, error)
- func (r Result[T]) String() string
- func (r Result[T]) ToX() Result[any]
- func (r *Result[T]) UnmarshalJSON(b []byte) error
- func (r Result[T]) Unwrap() T
- func (r Result[T]) UnwrapErr() error
- func (r Result[T]) UnwrapOr(defaultOk T) T
- func (r Result[T]) UnwrapOrDefault() T
- func (r Result[T]) UnwrapOrElse(defaultFn func(error) T) T
- func (r Result[T]) UnwrapOrThrow() T
- func (r Result[T]) UnwrapUnchecked() T
- func (r Result[T]) XAnd(res Result[any]) Result[any]
- func (r Result[T]) XAnd2(v2 any, err2 error) Result[any]
- func (r Result[T]) XAndThen(op func(T) Result[any]) Result[any]
- func (r Result[T]) XAndThen2(op func(T) (any, error)) Result[any]
- func (r Result[T]) XMap(f func(T) any) Result[any]
- func (r Result[T]) XMapOr(defaultOk any, f func(T) any) any
- func (r Result[T]) XMapOrElse(defaultFn func(error) any, f func(T) any) any
- func (r Result[T]) XOk() Option[any]
- type VoidResult
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ToError ¶
func ToError(r VoidResult) error
ToError converts VoidResult to a standard Go error. Returns nil if IsOk() is true, otherwise returns the error.
Example:
```go
import "github.com/andeya/gust/result"
var res result.VoidResult = result.RetVoid(err)
if err := result.ToError(res); err != nil {
return err
}
```
func UnwrapErrOr ¶
UnwrapErrOr returns the contained error value or a provided default for VoidResult.
Example:
```go
import "github.com/andeya/gust/result"
var res result.VoidResult = result.RetVoid(err)
err := result.UnwrapErrOr(res, errors.New("default error"))
```
Types ¶
type Option ¶
type Option[T any] struct { // contains filtered or unexported fields }
Option can be used to avoid `(T, bool)` and `if *U != nil`, represents an optional value:
every [`Option`] is either [`Some`](which is non-none T), or [`None`](which is none).
func BoolAssertOpt ¶
BoolAssertOpt wraps a value as an Option. NOTE:
`ok=true` is wrapped as Some, and `ok=false` is wrapped as None.
func BoolOpt ¶
BoolOpt wraps a value as an Option. NOTE:
`ok=true` is wrapped as Some, and `ok=false` is wrapped as None.
func ElemOpt ¶
ElemOpt wraps a value from pointer. NOTE:
`non-nil pointer` is wrapped as Some, and `nil pointer` is wrapped as None.
func None ¶
None returns a none. NOTE:
Option[T].IsNone() returns true, and Option[T].IsSome() returns false.
func PtrOpt ¶
PtrOpt wraps a pointer value. NOTE:
`non-nil pointer` is wrapped as Some, and `nil pointer` is wrapped as None.
func RetAnyOpt ¶
RetAnyOpt wraps a value as an `Option[any]`. NOTE:
`err != nil` or `value`==nil is wrapped as None, and `err == nil` and `value != nil` is wrapped as Some.
func RetOpt ¶
RetOpt wraps a value as an `Option[T]`. NOTE:
`err != nil` is wrapped as None, and `err == nil` is wrapped as Some.
func Some ¶
Some wraps a non-none value. NOTE:
Option[T].IsSome() returns true. and Option[T].IsNone() returns false.
func ZeroOpt ¶
func ZeroOpt[T comparable](value T) Option[T]
ZeroOpt wraps a value as an Option. NOTE:
`non-zero T` is wrapped as Some, and `zero T` is wrapped as None.
func (Option[T]) AndThen ¶
AndThen returns [`None`] if the option is [`None`], otherwise calls `f` with the
func (Option[T]) Expect ¶
Expect returns the contained [`Some`] value. Panics if the value is none with a custom panic message provided by `msg`.
func (Option[T]) Filter ¶
Filter returns [`None`] if the option is [`None`], otherwise calls `predicate` with the wrapped value and returns.
func (*Option[T]) GetOrInsert ¶
func (o *Option[T]) GetOrInsert(some T) *T
GetOrInsert inserts `value` into the option if it is [`None`], then returns the contained value pointer.
func (*Option[T]) GetOrInsertDefault ¶
func (o *Option[T]) GetOrInsertDefault() *T
GetOrInsertDefault inserts default value into the option if it is [`None`], then returns the contained value pointer.
func (*Option[T]) GetOrInsertWith ¶
func (o *Option[T]) GetOrInsertWith(f func() T) *T
GetOrInsertWith inserts a value computed from `f` into the option if it is [`None`], then returns the contained value.
func (*Option[T]) Insert ¶
func (o *Option[T]) Insert(some T) *T
Insert inserts `value` into the option, then returns its pointer.
func (Option[T]) Inspect ¶
Inspect calls the provided closure with a reference to the contained value (if it has value).
func (Option[T]) InspectNone ¶
InspectNone calls the provided closure (if it is none).
func (Option[T]) IsSomeAnd ¶
IsSomeAnd returns `true` if the option has value and the value inside it matches a predicate.
func (Option[T]) Map ¶
Map maps an `Option[T]` to `Option[T]` by applying a function to a contained value.
func (Option[T]) MapOr ¶
func (o Option[T]) MapOr(defaultSome T, f func(T) T) T
MapOr returns the provided default value (if none), or applies a function to the contained value (if any).
func (Option[T]) MapOrElse ¶
func (o Option[T]) MapOrElse(defaultFn func() T, f func(T) T) T
MapOrElse computes a default function value (if none), or applies a different function to the contained value (if any).
func (Option[T]) MarshalJSON ¶
MarshalJSON implements the json.Marshaler interface.
func (Option[T]) OkOr ¶
OkOr transforms the `Option[T]` into a [`Result[T]`], mapping [`Some(v)`] to [`Ok(v)`] and [`None`] to [`Err(err)`].
func (Option[T]) OkOrElse ¶
OkOrElse transforms the `Option[T]` into a [`Result[T]`], mapping [`Some(v)`] to [`Ok(v)`] and [`None`] to [`Err(errFn())`].
func (Option[T]) OrElse ¶
OrElse returns the option if it contains a value, otherwise calls `f` and returns the result.
func (*Option[T]) Replace ¶
Replace replaces the actual value in the option by the value given in parameter, returning the old value if present, leaving a [`Some`] in its place without deinitializing either one.
func (Option[T]) ToResult ¶
func (o Option[T]) ToResult() VoidResult
ToResult converts from `Option[T]` to `VoidResult` (Result[Void]). If Option is Some, returns Err[Void] with the value wrapped in errutil.ErrBox. If Option is None, returns Ok[Void](nil).
Example:
```go
import "github.com/andeya/gust/option"
import "github.com/andeya/gust/result"
var opt option.Option[string] = option.Some("value")
var res result.VoidResult = opt.ToResult()
```
func (*Option[T]) UnmarshalJSON ¶
UnmarshalJSON implements the json.Unmarshaler interface.
func (Option[T]) Unwrap ¶
func (o Option[T]) Unwrap() T
Unwrap returns the contained value. Panics if the value is none.
func (Option[T]) UnwrapOr ¶
func (o Option[T]) UnwrapOr(fallbackValue T) T
UnwrapOr returns the contained value or a provided fallback value.
func (Option[T]) UnwrapOrDefault ¶
func (o Option[T]) UnwrapOrDefault() T
UnwrapOrDefault returns the contained value or a non-nil-pointer zero value.
func (Option[T]) UnwrapOrElse ¶
func (o Option[T]) UnwrapOrElse(defaultSome func() T) T
UnwrapOrElse returns the contained value or computes it from a closure.
func (Option[T]) UnwrapOrThrow ¶
UnwrapOrThrow returns the contained T or panic returns error interface. NOTE:
If there is an error, that panic should be caught with `Result.Catch()`
func (Option[T]) UnwrapUnchecked ¶
func (o Option[T]) UnwrapUnchecked() T
UnwrapUnchecked returns the contained value.
func (Option[T]) XAndThen ¶
XAndThen returns [`None`] if the option is [`None`], otherwise calls `f` with the
func (Option[T]) XMap ¶
XMap maps an `Option[T]` to `Option[any]` by applying a function to a contained value.
func (Option[T]) XMapOr ¶
XMapOr returns the provided default value (if none), or applies a function to the contained value (if any).
func (Option[T]) XMapOrElse ¶
XMapOrElse computes a default function value (if none), or applies a different function to the contained value (if any).
func (Option[T]) XOkOr ¶
XOkOr transforms the `Option[T]` into a [`Result[any]`], mapping [`Some(v)`] to [`Ok(v)`] and [`None`] to [`Err(err)`].
type Result ¶
type Result[T any] struct { // contains filtered or unexported fields }
Result can be used to improve `func()(T,error)`, represents either success (T) or failure (error).
func TryErr ¶
TryErr wraps a failure result. NOTE: If err is nil, TryErr(nil) returns Ok with zero value. This follows the principle that nil represents "no error", so TryErr(nil) should be Ok.
Example:
```go
import "github.com/andeya/gust/result"
res := result.TryErr[string](nil) // This is an ok state
if res.IsOk() {
fmt.Println("This will be printed")
}
```
func (Result[T]) AndThen ¶
AndThen calls op if the result is Ok, otherwise returns the error of self. This function can be used for control flow based on Result values.
Example ¶
package main
import (
"fmt"
"github.com/andeya/gust/internal/core"
)
func main() {
var divide = func(i, j float32) core.Result[float32] {
if j == 0 {
return core.TryErr[float32]("j can not be 0")
}
return core.Ok(i / j)
}
var ret float32 = divide(1, 2).AndThen(func(i float32) core.Result[float32] {
return core.Ok(i * 10)
}).Unwrap()
fmt.Println(ret)
}
Output: 5
func (Result[T]) AndThen2 ¶
AndThen2 calls op if the result is Ok, otherwise returns the error of self. This function can be used for control flow based on Result values.
func (*Result[T]) Catch ¶
Catch catches any panic and converts it to a Result error. It catches:
- errutil.ErrBox (gust's own error type, value type)
- error (regular Go errors, wrapped in ErrBox)
- any other type (wrapped in ErrBox)
When a panic is caught, Catch can optionally capture the panic stack trace using PanicStackTrace() and wrap it with the error for better debugging. By default, stack trace is captured (withStackTrace defaults to true). Set withStackTrace to false to disable stack trace capture for better performance.
Example:
```go
func example() (result Result[string]) {
defer result.Catch() // With stack trace (default)
Err[int]("int error").UnwrapOrThrow()
return Ok[string]("ok")
}
func exampleNoStack() (result Result[string]) {
defer result.Catch(false) // Without stack trace
Err[int]("int error").UnwrapOrThrow()
return Ok[string]("ok")
}
```
func (Result[T]) ContainsErr ¶
ContainsErr returns true if the result is an error containing the given value.
func (Result[T]) Expect ¶
Expect returns the contained Ok value. Panics if the value is an error, with a panic message including the passed message, and the content of the error.
func (Result[T]) ExpectErr ¶
ExpectErr returns the contained error. Panics if the value is not an error, with a panic message including the passed message, and the content of the [`Ok`].
func (Result[T]) Flatten ¶
Flatten converts from `(Result[T], error)` to Result[T].
Examples ¶
import "github.com/andeya/gust/result"
var r1 = result.Ok(1)
var err1 = nil
var result1 = r1.Flatten(err1)
assert.Equal(t, result.Ok[int](1), result1)
var r2 = result.Ok(1)
var err2 = errors.New("error")
var result2 = r2.Flatten(err2)
assert.Equal(t, "error", result2.Err().Error())
var r3 = result.TryErr[int](errors.New("error"))
var err3 = nil
var result3 = r3.Flatten(err3)
assert.Equal(t, "error", result3.Err().Error())
func (Result[T]) Inspect ¶
Inspect calls the provided closure with a reference to the contained value (if no error).
func (Result[T]) InspectErr ¶
InspectErr calls the provided closure with a reference to the contained error (if error).
func (Result[T]) IsErr ¶
IsErr returns true if the result is error. NOTE: This is determined by whether t.IsSome() is false, not by e.IsEmpty(). This ensures that Err(nil) is correctly identified as an error state, following declarative programming principles where Err() explicitly declares an error result.
func (Result[T]) IsErrAnd ¶
IsErrAnd returns true if the result is error and the value inside it matches a predicate.
func (Result[T]) IsOk ¶
IsOk returns true if the result is Ok. NOTE: This is determined by whether t.IsSome() is true, not by e.IsEmpty(). This ensures that Err(nil) is correctly identified as an error state, following declarative programming principles where Err() explicitly declares an error result.
func (Result[T]) IsOkAnd ¶
IsOkAnd returns true if the result is Ok and the value inside it matches a predicate.
func (Result[T]) Map ¶
Map maps a Result[T] to Result[T] by applying a function to a contained Ok value, leaving an error untouched. This function can be used to compose the results of two functions.
func (Result[T]) MapErr ¶
MapErr maps a Result[T] to Result[T] by applying a function to a contained error, leaving an Ok value untouched. This function can be used to pass through a successful result while handling an error.
func (Result[T]) MapOr ¶
func (r Result[T]) MapOr(defaultOk T, f func(T) T) T
MapOr returns the provided default (if error), or applies a function to the contained value (if no error), Arguments passed to map_or are eagerly evaluated; if you are passing the result of a function call, it is recommended to use MapOrElse, which is lazily evaluated.
func (Result[T]) MapOrElse ¶
MapOrElse maps a Result[T] to T by applying fallback function default to a contained error, or function f to a contained Ok value. This function can be used to unpack a successful result while handling an error.
func (Result[T]) MarshalJSON ¶
MarshalJSON implements the json.Marshaler interface.
func (Result[T]) Or ¶
Or returns `r2` if `r` is `Err`, otherwise returns `r`. Arguments passed to or are eagerly evaluated; if you are passing the result of a function call, it is recommended to use OrElse, which is lazily evaluated.
func (Result[T]) OrElse ¶
OrElse calls op if the result is Err, otherwise returns the Ok value of self. This function can be used for control flow based on result values.
func (Result[T]) OrElse2 ¶
OrElse2 calls op if the result is Err, otherwise returns the Ok value of self. This function can be used for control flow based on result values.
func (*Result[T]) UnmarshalJSON ¶
UnmarshalJSON implements the json.Unmarshaler interface.
func (Result[T]) Unwrap ¶
func (r Result[T]) Unwrap() T
Unwrap returns the contained Ok value. Because this function may panic, its use is generally discouraged. Instead, prefer to use pattern matching and handle the error case explicitly, or call UnwrapOr or UnwrapOrElse. NOTE: This panics with error interface (from r.e.ToError()) to be consistent with Result.UnwrapOrThrow() and allow Result.Catch() to properly handle it.
func (Result[T]) UnwrapErr ¶
UnwrapErr returns the contained error. Panics if the value is not an error, with a custom panic message provided by the [`Ok`]'s value.
func (Result[T]) UnwrapOr ¶
func (r Result[T]) UnwrapOr(defaultOk T) T
UnwrapOr returns the contained Ok value or a provided default. Arguments passed to UnwrapOr are eagerly evaluated; if you are passing the result of a function call, it is recommended to use UnwrapOrElse, which is lazily evaluated.
func (Result[T]) UnwrapOrDefault ¶
func (r Result[T]) UnwrapOrDefault() T
UnwrapOrDefault returns the contained T or a non-nil-pointer zero T.
func (Result[T]) UnwrapOrElse ¶
UnwrapOrElse returns the contained Ok value or computes it from a closure.
func (Result[T]) UnwrapOrThrow ¶
func (r Result[T]) UnwrapOrThrow() T
UnwrapOrThrow returns the contained T or panic returns error interface. NOTE:
If there is an error, that panic should be caught with `Result.Catch()`
func (Result[T]) UnwrapUnchecked ¶
func (r Result[T]) UnwrapUnchecked() T
UnwrapUnchecked returns the contained T.
func (Result[T]) XAndThen ¶
XAndThen calls op if the result is Ok, otherwise returns the error of self. This function can be used for control flow based on Result values.
func (Result[T]) XAndThen2 ¶
XAndThen2 calls op if the result is Ok, otherwise returns the error of self. This function can be used for control flow based on Result values.
func (Result[T]) XMap ¶
XMap maps a Result[T] to Result[any] by applying a function to a contained Ok value, leaving an error untouched. This function can be used to compose the results of two functions.
func (Result[T]) XMapOr ¶
XMapOr returns the provided default (if error), or applies a function to the contained value (if no error), Arguments passed to map_or are eagerly evaluated; if you are passing the result of a function call, it is recommended to use MapOrElse, which is lazily evaluated.
func (Result[T]) XMapOrElse ¶
XMapOrElse maps a Result[T] to `any` by applying fallback function default to a contained error, or function f to a contained Ok value. This function can be used to unpack a successful result while handling an error.
type VoidResult ¶
VoidResult is an alias for Result[Void], representing a result that only indicates success or failure. This is equivalent to Rust's Result<(), E> and provides a simpler API than Result[Void].
Example:
```go
import "github.com/andeya/gust/result"
var res result.VoidResult = result.RetVoid(err)
if res.IsErr() {
fmt.Println(res.Err())
}
```
func OkVoid ¶
func OkVoid() VoidResult
OkVoid returns Ok[Void](nil).
Example:
```go import "github.com/andeya/gust/result" var res result.VoidResult = result.OkVoid() ```
func RetVoid ¶
func RetVoid(maybeError any) VoidResult
RetVoid wraps an error as VoidResult (Result[Void]). Returns Ok[Void](nil) if maybeError is nil, otherwise returns Err[Void](maybeError).
Example:
```go import "github.com/andeya/gust/result" var res result.VoidResult = result.RetVoid(maybeError) ```
func TryErrVoid ¶
func TryErrVoid(err any) VoidResult
TryErrVoid wraps a failure result as VoidResult. NOTE: If err is nil, TryErrVoid(nil) returns OkVoid().