Skip to content

Commit

Permalink
Add function Validate that creates an error when a condition is not m…
Browse files Browse the repository at this point in the history
…et (#221)
  • Loading branch information
CorentinClabaut committed Oct 4, 2022
1 parent c190e19 commit 8e8ccc1
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
16 changes: 16 additions & 0 deletions README.md
Expand Up @@ -208,6 +208,7 @@ Concurrency helpers:

Error handling:

- [Validate](#validate)
- [Must](#must)
- [Try](#try)
- [Try1 -> Try6](#try0-6)
Expand Down Expand Up @@ -2079,6 +2080,21 @@ ch := lo.Async2(func() (int, string) {
// chan lo.Tuple2[int, string] ({42, "Hello"})
```

### Validate

Helper function that creates an error when a condition is not met.

```go
slice := []string{"a"}
val := lo.Validate(len(slice) == 0, "Slice should be empty but contains %v", slice)
// error("Slice should be empty but contains [a]")

slice := []string{}
val := lo.Validate(len(slice) == 0, "Slice should be empty but contains %v", slice)
// nil
```


### Must

Wraps a function call to panics if second argument is `error` or `false`, returns the value otherwise.
Expand Down
8 changes: 8 additions & 0 deletions errors.go
Expand Up @@ -6,6 +6,14 @@ import (
"reflect"
)

// Validate is a helper that creates an error when a condition is not met.
func Validate(ok bool, format string, args ...any) error {
if !ok {
return errors.New(fmt.Sprint(format, args))
}
return nil
}

func messageFromMsgAndArgs(msgAndArgs ...interface{}) string {
if len(msgAndArgs) == 1 {
if msgAsStr, ok := msgAndArgs[0].(string); ok {
Expand Down
13 changes: 13 additions & 0 deletions errors_test.go
Expand Up @@ -8,6 +8,19 @@ import (
"github.com/stretchr/testify/assert"
)

func TestValidate(t *testing.T) {
is := assert.New(t)

slice := []string{"a"}
result1 := Validate(len(slice) == 0, "Slice should be empty but contains %v", slice)

slice = []string{}
result2 := Validate(len(slice) == 0, "Slice should be empty but contains %v", slice)

is.Error(result1)
is.NoError(result2)
}

func TestMust(t *testing.T) {
t.Parallel()
is := assert.New(t)
Expand Down

0 comments on commit 8e8ccc1

Please sign in to comment.