fender

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 27, 2023 License: MIT Imports: 6 Imported by: 1

README

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.

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func All added in v0.3.0

func All(ctx context.Context, fends ...fend.Fend) error
Example
package main

import (
	"context"
	"fmt"

	"github.com/foomo/fender"
	"github.com/foomo/fender/fend"
	"github.com/foomo/fender/rule"
)

func main() {
	err := fender.All(
		context.Background(),
		fend.Field("one", "", rule.Required[string], rule.StringMin(10)),
		fend.Field("two", "", rule.Required[string], rule.StringMin(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

func AllFirst added in v0.3.0

func AllFirst(ctx context.Context, fends ...fend.Fend) error
Example
package main

import (
	"context"
	"fmt"

	"github.com/foomo/fender"
	"github.com/foomo/fender/fend"
	"github.com/foomo/fender/rule"
)

func main() {
	err := fender.AllFirst(
		context.Background(),
		fend.Field("one", "", rule.Required[string], rule.StringMin(10)),
		fend.Field("two", "", rule.Required[string], rule.StringMin(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

func First added in v0.3.0

func First(ctx context.Context, fends ...fend.Fend) error
Example
package main

import (
	"context"
	"fmt"

	"github.com/foomo/fender"
	"github.com/foomo/fender/fend"
	"github.com/foomo/fender/rule"
)

func main() {
	err := fender.First(
		context.Background(),
		fend.Field("one", "", rule.Required[string], rule.StringMin(10)),
		fend.Field("two", "", rule.Required[string], rule.StringMin(10)),
	)

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

one:required

func Mode added in v1.0.0

func Mode(ctx context.Context, mode fend.Mode, fends ...fend.Fend) error

Types

type Error added in v0.3.0

type Error struct {
	FendErrs []*fend.Error
}

func AsError added in v1.0.0

func AsError(err error) *Error

func NewError added in v0.3.0

func NewError(fendErrs ...*fend.Error) *Error

func NewFendError

func NewFendError(name string, ruleErrs ...*rule.Error) *Error

func NewFendRuleError added in v1.0.0

func NewFendRuleError(name string, ruleName rule.Name, ruleMeta ...string) *Error

func (*Error) Error added in v0.3.0

func (e *Error) Error() string

func (*Error) Errors added in v0.3.0

func (e *Error) Errors() []error

func (*Error) First added in v0.3.0

func (e *Error) First() error

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL