Skip to content

Commit

Permalink
builtin: FirstNonEmpty()
Browse files Browse the repository at this point in the history
  • Loading branch information
joonas-fi committed Mar 27, 2023
1 parent f29d203 commit 7e56ca9
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 11 deletions.
34 changes: 23 additions & 11 deletions builtin/builtin.go
Expand Up @@ -34,17 +34,6 @@ func Pointer[T any](val T) *T {
return &val
}

// returns first error, or nil if no errors
func FirstError(errs ...error) error {
for _, err := range errs {
if err != nil {
return err
}
}

return nil
}

// helper for wrapping an error with error prefix.
// if error is nil, nil is returned.
func ErrorWrap(prefix string, err error) error {
Expand All @@ -63,3 +52,26 @@ func ErrorIfUnset(isUnset bool, fieldName string) error {
return nil
}
}

// returns the first non-empty value.
func FirstNonEmpty[T comparable](values ...T) T {
var empty T
for _, value := range values {
if value != empty {
return value
}
}
return empty
}

// returns first error, or nil if no errors
// Deprecated: use `FirstNonEmpty()`
func FirstError(errs ...error) error {
for _, err := range errs {
if err != nil {
return err
}
}

return nil
}
21 changes: 21 additions & 0 deletions builtin/builtin_test.go
Expand Up @@ -54,3 +54,24 @@ func TestErrorIfUnset(t *testing.T) {
assert.Assert(t, ErrorIfUnset(false, "foo") == nil)
assert.EqualString(t, ErrorIfUnset(true, "foo").Error(), "'foo' is required")
}

func TestFirstNonEmptyWithString(t *testing.T) {
assert.EqualString(t, FirstNonEmpty("foo", "bar"), "foo")
assert.EqualString(t, FirstNonEmpty("", "bar"), "bar")
assert.EqualString(t, FirstNonEmpty(""), "")
}

func TestFirstNonEmptyWithInt(t *testing.T) {
var zero int
pi := int(314)

assert.Assert(t, FirstNonEmpty(zero, pi) == 314)
assert.Assert(t, FirstNonEmpty(pi, zero) == 314)
}

func TestFirstNonEmptyWithError(t *testing.T) {
var nilError error = nil
actualError := errors.New("actual")

assert.EqualString(t, FirstNonEmpty(nilError, actualError).Error(), "actual")
}

0 comments on commit 7e56ca9

Please sign in to comment.