Skip to content

Commit

Permalink
feat: switch to generics
Browse files Browse the repository at this point in the history
  • Loading branch information
franklinkim committed Mar 8, 2023
1 parent ca0ae8a commit 21a020e
Show file tree
Hide file tree
Showing 46 changed files with 832 additions and 1,278 deletions.
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ check: test lint
test:
gotestsum --format dots-v2 ./...

.PHONY: bench
## Run benchmarks
bench:
go test -bench | prettybench

.PHONY: lint
## Run linter
lint:
Expand Down
22 changes: 0 additions & 22 deletions all.go

This file was deleted.

71 changes: 0 additions & 71 deletions all_test.go

This file was deleted.

111 changes: 0 additions & 111 deletions benchmarks_test.go

This file was deleted.

12 changes: 0 additions & 12 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,6 @@ import (
"github.com/go-playground/validator/v10"
)

const (
DefaultRuleDelimiter = ";"
DefaultFieldDelimiter = ":"
DefaultMetaDelimiter = "="
)

var (
FieldDelimiter = DefaultFieldDelimiter
RuleDelimiter = DefaultRuleDelimiter
MetaDelimiter = DefaultMetaDelimiter
)

// EmailRegexWeak as https://davidcel.is/posts/stop-validating-email-addresses-with-regex/
var EmailRegexWeak = `.+@.+\..+`

Expand Down
15 changes: 15 additions & 0 deletions config/delimter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package config

const (
DefaultFendDelimiter = ";"
DefaultFendNameDelimiter = ":"
DefaultRuleDelimiter = ":"
DefaultRuleMetaDelimiter = "="
)

var (
FendDelimiter = DefaultFendDelimiter
FendNameDelimiter = DefaultFendNameDelimiter
RuleDelimiter = DefaultRuleDelimiter
RuleMetaDelimiter = DefaultRuleMetaDelimiter
)
53 changes: 32 additions & 21 deletions error.go
Original file line number Diff line number Diff line change
@@ -1,40 +1,51 @@
package fender

// Error type
import (
"errors"
"strings"

"github.com/foomo/fender/config"
"go.uber.org/multierr"
)

type Error struct {
Fields FieldErrors
cause error
}

var Err = &Error{}

// NewError constructor
func NewError(fields FieldErrors) *Error {
func NewError(cause error) *Error {
return &Error{
Fields: fields,
cause: cause,
}
}

// Is interface
func (e *Error) Is(err error) bool {
if err == nil {
return false
func (e *Error) Error() string {
errs := multierr.Errors(e.cause)
causes := make([]string, len(errs))
for i, cause := range errs {
causes[i] = cause.Error()
}
_, ok := err.(*Error) //nolint:errorlint
return ok
return strings.Join(causes, config.FendDelimiter)
}

// Error interface
func (e *Error) Error() string {
return e.Fields.String()
func (e *Error) First() error {
if errs := e.Errors(); len(errs) > 0 {
return errs[0]
}
return nil
}

func (e *Error) Errors() FieldErrors {
return e.Fields
func (e *Error) Errors() []error {
return multierr.Errors(e.cause)
}

func (e *Error) First() error {
for _, err := range e.Fields {
return err
func (e *Error) Unwrap() error {
return e.cause
}

func AsError(err error) *Error {
var fendErr *Error
if errors.As(err, &fendErr) {
return fendErr
}
return nil
}
26 changes: 0 additions & 26 deletions errors.go

This file was deleted.

19 changes: 0 additions & 19 deletions fend/all.go

This file was deleted.

0 comments on commit 21a020e

Please sign in to comment.