Go to file
Kevin Franklin Kim 74a8d82337
Merge pull request #38 from foomo/dependabot/go_modules/github.com/go-playground/validator/v10-10.16.0
chore(deps): bump github.com/go-playground/validator/v10 from 10.15.3 to 10.16.0
2024-04-30 08:19:57 +02:00
.github Merge pull request #35 from foomo/dependabot/github_actions/goreleaser/goreleaser-action-5 2024-04-30 08:19:34 +02:00
config refactor: format 2023-04-07 10:21:04 +02:00
fend feat: remove multierr in favor of types 2023-06-27 15:31:47 +02:00
rule refactor: rename 2023-04-07 10:21:17 +02:00
.editorconfig initial commit 2021-06-24 15:07:02 +02:00
.gitignore chore: add go releaser 2023-03-07 08:02:15 +01:00
.golangci.yml feat: remove multierr in favor of types 2023-06-27 15:31:47 +02:00
.goreleaser.yml chore: add go releaser 2023-03-07 08:02:15 +01:00
.husky.yaml chore: add husky 2022-02-04 09:15:49 +01:00
error.go feat: remove multierr in favor of types 2023-06-27 15:31:47 +02:00
fender_benchmarks_test.go feat: add union 2023-03-17 08:12:32 +01:00
fender_example_test.go revert: remove duplicate 2023-03-17 08:31:34 +01:00
fender_test.go fix: tests 2023-03-17 08:38:37 +01:00
fender.go feat: remove multierr in favor of types 2023-06-27 15:31:47 +02:00
go.mod chore(deps): bump github.com/go-playground/validator/v10 2023-11-06 02:28:12 +00:00
go.sum chore(deps): bump github.com/go-playground/validator/v10 2023-11-06 02:28:12 +00:00
LICENSE initial commit 2021-06-24 15:07:02 +02:00
Makefile feat: gomod tidy 2023-06-27 15:43:30 +02:00
README.md docs: update 2023-04-07 10:21:50 +02:00

fender

a piece of rope or a tyre that protects the side of a boat from knocks

Fender provides a unified way to validate data and on the backend & frontend side.

Usage

All

func ExampleAll() {
	err := fender.All(
		context.Background(),
		fend.Field("one", "", rule.RequiredString, rule.MinString(10)),
		fend.Field("two", "", rule.RequiredString, rule.MinString(10)),
	)
	// check for fender error
	if fendErr := fender.AsError(err); fendErr != nil {
		fmt.Println(err)
	} else if err != nil {
		panic(err)
	}
	// Output: one:required:min=10;two:required:min=10
}

AllFirst

func ExampleAllFirst() {
	err := fender.AllFirst(
		context.Background(),
		fend.Field("one", "", rule.RequiredString, rule.MinString(10)),
		fend.Field("two", "", rule.RequiredString, rule.MinString(10)),
	)

	// check for fender error
	if fendErr := fender.AsError(err); fendErr != nil {
		fmt.Println(err)
	} else if err != nil {
		panic(err)
	}
	// Output: one:required:min=10
}

First

func ExampleFirst() {
	err := fender.First(
		context.Background(),
		fend.Field("one", "", rule.RequiredString, rule.MinString(10)),
		fend.Field("two", "", rule.RequiredString, rule.MinString(10)),
	)

	// check for fender error
	if fendErr := fender.AsError(err); fendErr != nil {
		fmt.Println(err)
	} else if err != nil {
		panic(err)
	}
	// Output: one:required
}

Handle errors

func ExampleErrors() {
	err := fender.All(
		context.Background(),
		fend.Field("one", "", rule.RequiredString, rule.MinString(10)),
		fend.Field("two", "", rule.RequiredString, rule.MinString(10)),
	)

	// cast fender error
	if fenderErr := fender.AsError(err); fenderErr != nil {

		// iterate fend errors
		for _, err := range fenderErr.Errors() {

			// cast fend error
			if fendErr := fend.AsError(err); fendErr != nil {

				fmt.Println(fendErr.Name())

				// iterate rule errors
				for _, err := range fendErr.Errors() {

					// cast rule error
					if ruleErr := rule.AsError(err); ruleErr != nil {
						fmt.Println(ruleErr.Error())
					}
				}
			}
		}
	} else if err != nil {
		panic(err)
	}
	// Output:
	// one
	// required
	// min=10
	// two
	// required
	// min=10
}

Benchmarks

go test -bench=. | prettybench
goos: darwin
goarch: arm64
pkg: github.com/foomo/fender
PASS
benchmark                                      iter       time/iter
---------                                      ----       ---------
BenchmarkAll/invalid_reused/fender-10        282154   3771.00 ns/op
BenchmarkAll/invalid_reused/playground-10    678679   1741.00 ns/op
BenchmarkAll/success_new/fender-10          1000000   1026.00 ns/op
BenchmarkAll/success_new/playground-10      1308327    937.60 ns/op
ok  	github.com/foomo/fender	5.619s

References & alternatives

How to Contribute

Make a pull request...

License

Distributed under MIT License, please see license file within the code for more details.