result API

result

package

API reference for the result package.

S
struct

Result

Result represents either a success value or an error.

pkg/result/result.go:9-12
type Result struct

Example

r := result.Ok(42)
if r.IsOk() { ... }

Fields

Name Type Description
value T
err error
F
function

Ok

Ok creates a successful Result.

Parameters

value
T

Returns

Result[T]
pkg/result/result.go:15-17
func Ok[T any](value T) Result[T]

{
	return Result[T]{value: value}
}
F
function

Err

Err creates an error Result.

Parameters

err
error

Returns

Result[T]
pkg/result/result.go:20-22
func Err[T any](err error) Result[T]

{
	return Result[T]{err: err}
}
F
function

Map

Map transforms the value if successful.

Parameters

r
Result[T]
fn
func(T) U

Returns

Result[U]
pkg/result/result.go:78-83
func Map[T, U any](r Result[T], fn func(T) U) Result[U]

{
	if r.err != nil {
		return Err[U](r.err)
	}
	return Ok(fn(r.value))
}

Example

r := result.Ok(10)
r2 := result.Map(r, func(i int) string { return strconv.Itoa(i) })
F
function

FlatMap

FlatMap transforms the value with a function that returns a Result.

Parameters

r
Result[T]
fn
func(T) Result[U]

Returns

Result[U]
pkg/result/result.go:86-91
func FlatMap[T, U any](r Result[T], fn func(T) Result[U]) Result[U]

{
	if r.err != nil {
		return Err[U](r.err)
	}
	return fn(r.value)
}
F
function

From

From wraps a traditional (value, error) tuple into a Result.

Parameters

value
T
err
error

Returns

Result[T]
pkg/result/result.go:94-99
func From[T any](value T, err error) Result[T]

{
	if err != nil {
		return Err[T](err)
	}
	return Ok(value)
}
F
function

Try

Try executes fn and wraps the result.

Parameters

fn
func() (T, error)

Returns

Result[T]
pkg/result/result.go:102-105
func Try[T any](fn func() (T, error)) Result[T]

{
	v, err := fn()
	return From(v, err)
}
F
function

Must

Must panics if the result is an error, otherwise returns the value.

Parameters

r
Result[T]

Returns

T
pkg/result/result.go:108-110
func Must[T any](r Result[T]) T

{
	return r.Unwrap()
}
F
function

TestResult_Ok

Parameters

pkg/result/result_test.go:9-21
func TestResult_Ok(t *testing.T)

{
	r := Ok(42)

	if !r.IsOk() {
		t.Error("IsOk should be true")
	}
	if r.IsErr() {
		t.Error("IsErr should be false")
	}
	if r.Unwrap() != 42 {
		t.Errorf("Unwrap: got %d, want 42", r.Unwrap())
	}
}
F
function

TestResult_Err

Parameters

pkg/result/result_test.go:23-35
func TestResult_Err(t *testing.T)

{
	r := Err[int](errors.New("failed"))

	if r.IsOk() {
		t.Error("IsOk should be false")
	}
	if !r.IsErr() {
		t.Error("IsErr should be true")
	}
	if r.Error() == nil {
		t.Error("Error should not be nil")
	}
}
F
function

TestResult_Unwrap_Panic

Parameters

pkg/result/result_test.go:37-47
func TestResult_Unwrap_Panic(t *testing.T)

{
	r := Err[int](errors.New("panic test"))

	defer func() {
		if recover() == nil {
			t.Error("Unwrap should panic on error")
		}
	}()

	r.Unwrap()
}
F
function

TestResult_UnwrapOr

Parameters

pkg/result/result_test.go:49-59
func TestResult_UnwrapOr(t *testing.T)

{
	ok := Ok(10)
	err := Err[int](errors.New("fail"))

	if ok.UnwrapOr(0) != 10 {
		t.Error("UnwrapOr should return value for Ok")
	}
	if err.UnwrapOr(99) != 99 {
		t.Error("UnwrapOr should return default for Err")
	}
}
F
function

TestResult_UnwrapOrElse

Parameters

pkg/result/result_test.go:61-71
func TestResult_UnwrapOrElse(t *testing.T)

{
	r := Err[int](errors.New("custom"))

	val := r.UnwrapOrElse(func(e error) int {
		return len(e.Error())
	})

	if val != 6 {
		t.Errorf("UnwrapOrElse: got %d, want 6", val)
	}
}
F
function

TestResult_Value

Parameters

pkg/result/result_test.go:73-83
func TestResult_Value(t *testing.T)

{
	r := Ok("hello")
	v, err := r.Value()

	if err != nil {
		t.Error("err should be nil")
	}
	if v != "hello" {
		t.Errorf("value: got %q, want %q", v, "hello")
	}
}
F
function

TestMap

Parameters

pkg/result/result_test.go:85-92
func TestMap(t *testing.T)

{
	r := Ok(5)
	doubled := Map(r, func(n int) int { return n * 2 })

	if doubled.Unwrap() != 10 {
		t.Errorf("Map: got %d, want 10", doubled.Unwrap())
	}
}
F
function

TestMap_PropagatesError

Parameters

pkg/result/result_test.go:94-101
func TestMap_PropagatesError(t *testing.T)

{
	r := Err[int](errors.New("original"))
	mapped := Map(r, func(n int) string { return "never" })

	if mapped.IsOk() {
		t.Error("Map should propagate error")
	}
}
F
function

TestFlatMap

Parameters

pkg/result/result_test.go:103-113
func TestFlatMap(t *testing.T)

{
	r := Ok("123")
	parsed := FlatMap(r, func(s string) Result[int] {
		n, err := strconv.Atoi(s)
		return From(n, err)
	})

	if parsed.Unwrap() != 123 {
		t.Errorf("FlatMap: got %d, want 123", parsed.Unwrap())
	}
}
F
function

TestFrom

Parameters

pkg/result/result_test.go:115-125
func TestFrom(t *testing.T)

{
	r1 := From(42, nil)
	if !r1.IsOk() {
		t.Error("From with nil error should be Ok")
	}

	r2 := From(0, errors.New("fail"))
	if !r2.IsErr() {
		t.Error("From with error should be Err")
	}
}
F
function

TestTry

Parameters

pkg/result/result_test.go:127-135
func TestTry(t *testing.T)

{
	r := Try(func() (int, error) {
		return 100, nil
	})

	if r.Unwrap() != 100 {
		t.Errorf("Try: got %d, want 100", r.Unwrap())
	}
}
F
function

TestMust

Parameters

pkg/result/result_test.go:137-142
func TestMust(t *testing.T)

{
	r := Ok("success")
	if Must(r) != "success" {
		t.Error("Must should return value")
	}
}