vax

package
v0.0.0-...-3839eb7 Latest Latest
Warning

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

Go to latest
Published: Mar 5, 2024 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package vax validation provides configurable and extensible rules for validating data of various types.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrNil is the error that returns when a value is not nil.
	ErrNil = NewError("validate.isnil", "must be blank")
	// ErrEmpty is the error that returns when a not nil value is not empty.
	ErrEmpty = NewError("validate.isempty", "must be blank")
)
View Source
var (
	// ErrLengthTooLong is the error that returns in case of too long length.
	ErrLengthTooLong = NewError("validate.length.max", "the length must be no more than %v")
	// ErrLengthTooShort is the error that returns in case of too short length.
	ErrLengthTooShort = NewError("validate.length.min", "the length must be no less than %v")
	// ErrLengthInvalid is the error that returns in case of an invalid length.
	ErrLengthInvalid = NewError("validate.length.eq", "the length must be exactly %v")
	// ErrLengthOutOfRange is the error that returns in case of out of range length.
	ErrLengthOutOfRange = NewError("validate.length.range", "the length must be between %v and %v")
)
View Source
var (
	// ErrNotMap is the error that the value being validated is not a map.
	ErrNotMap = errors.New("only a map can be validated")

	// ErrKeyWrongType is the error returned in case of an incorrect key type.
	ErrKeyWrongType = NewError("validation_key_wrong_type", "key not the correct type")

	// ErrKeyMissing is the error returned in case of a missing key.
	ErrKeyMissing = NewError("validation_key_missing", "required key is missing")

	// ErrKeyUnexpected is the error returned in case of an unexpected key.
	ErrKeyUnexpected = NewError("validation_key_unexpected", "key not expected")
)
View Source
var (
	// ErrMinGreaterEqualThanRequired is the error that returns when a value is less than a specified threshold.
	ErrMinGreaterEqualThanRequired = NewError("validate.gte", "must be greater than or equal to %v")
	// ErrMaxLessEqualThanRequired is the error that returns when a value is greater than a specified threshold.
	ErrMaxLessEqualThanRequired = NewError("validate.lte", "must be less than or equal to %v")
	// ErrMinGreaterThanRequired is the error that returns when a value is less than or equal to a specified threshold.
	ErrMinGreaterThanRequired = NewError("validate.gt", "must be greater than %v")
	// ErrMaxLessThanRequired is the error that returns when a value is greater than or equal to a specified threshold.
	ErrMaxLessThanRequired = NewError("validate.lt", "must be less than %v")
	ErrEqualRequired       = NewError("validate.eq", "must be equal to %v")
)
View Source
var (
	// ErrRequired is the error that returns when a value is required.
	ErrRequired = NewError("validate.required", "is required")
	// ErrNilOrNotEmpty is the error that returns when a value is not nil and is empty.
	ErrNilOrNotEmpty = NewError("validate.empty", "cannot be blank")
)
View Source
var (
	// LabelTag is the struct tag name used to customize the error field name for a struct field.
	LabelTag = "label"

	// Skip is a special validation rule that indicates all rules following it should be skipped.
	Skip = skipRule{/* contains filtered or unexported fields */}
)
View Source
var Empty = absentRule{/* contains filtered or unexported fields */}

Empty checks if a not nil value is empty.

View Source
var ErrInInvalid = NewError("validate.oneof", "must be oneof value in [%v]")

ErrInInvalid is the error that returns in case of an invalid value for "in" rule.

View Source
var ErrMatchInvalid = NewError("validate.match", "must match regular expression %v")

ErrMatchInvalid is the error that returns in case of invalid format.

View Source
var ErrMultipleOfInvalid = NewError("validate.multiple", "must be multiple of %v")

ErrMultipleOfInvalid is the error that returns when a value is not multiple of a base.

View Source
var ErrNotInInvalid = NewError("validate.notoneof", "cannot be one of several values [%v]")

ErrNotInInvalid is the error that returns when a value is in a list.

View Source
var ErrNotNilRequired = NewError("validate.notnil", "can not be nil")

ErrNotNilRequired is the error that returns when a value is Nil.

View Source
var (
	// ErrStructPointer is the error that a struct being validated is not specified as a pointer.
	ErrStructPointer = errors.New("only a pointer to a struct can be validated")
)
View Source
var Nil = absentRule{/* contains filtered or unexported fields */}

Nil is a validation rule that checks if a value is nil. It is the opposite of NotNil rule

View Source
var NilOrNotEmpty = RequiredRule{/* contains filtered or unexported fields */}

NilOrNotEmpty checks if a value is a nil pointer or a value that is not empty. NilOrNotEmpty differs from Required in that it treats a nil pointer as valid.

View Source
var NotNil = notNilRule{}

NotNil is a validation rule that checks if a value is not nil. NotNil only handles types including interface, pointer, slice, and map. All other types are considered valid.

View Source
var Required = RequiredRule{/* contains filtered or unexported fields */}

Required is a validation rule that checks if a value is not empty. A value is considered not empty if - integer, float: not zero - bool: true - string, array, slice, map: len() > 0 - interface, pointer: not nil and the referenced value is not empty - any other types

Functions

func Combine

func Combine(params ...any) string

func EnsureString

func EnsureString(value interface{}) (string, error)

EnsureString ensures the given value is a string. If the value is a byte slice, it will be typecast into a string. An error is returned otherwise.

func Indirect

func Indirect(value interface{}) (interface{}, bool)

Indirect returns the value that the given interface or pointer references to. If the value implements driver.Valuer, it will deal with the value returned by the Value() method instead. A boolean value is also returned to indicate if the value is nil or not (only applicable to interface, pointer, map, and slice). If the value is neither an interface nor a pointer, it will be returned back.

func IsEmpty

func IsEmpty(value interface{}) bool

IsEmpty checks if a value is empty or not. A value is considered empty if - integer, float: zero - bool: false - string, array: len() == 0 - slice, map: nil or len() == 0 - interface, pointer: nil or the referenced value is empty

func Len

func Len(val any, rune bool) (int, error)

func LengthOfValue

func LengthOfValue(value interface{}) (int, error)

LengthOfValue returns the length of a value that is a string, slice, map, or array. An error is returned for all other types.

func SetTranslator

func SetTranslator(t Translator)

func StringOrBytes

func StringOrBytes(value interface{}) (isString bool, str string, isBytes bool, bs []byte)

StringOrBytes typecasts a value into a string or byte slice. Boolean flags are returned to indicate if the typecasting succeeds or not.

func Struct

func Struct(structPtr interface{}, lang string, fields ...*FieldRules) error

Struct validates a struct by checking the specified struct fields against the corresponding validation rules. Note that the struct being validated must be specified as a pointer to it. If the pointer is nil, it is considered valid. Use Field() to specify struct fields that need to be validated. Each Field() call specifies a single field which should be specified as a pointer to the field. A field can be associated with multiple rules. For example,

value := struct {
    Username  string
    Value string
}{"name", "demo"}
err := validation.Struct(&value,
    validation.Field(&a.Username, validation.Required),
    validation.Field(&a.Value, validation.Required, validation.RangeLength(5, 10)),
)
fmt.Println(err)
// Value: the length must be between 5 and 10.

An error will be returned if validation fails.

func StructWithCtx

func StructWithCtx(ctx context.Context, lang string, structPtr interface{}, fields ...*FieldRules) error

StructWithCtx validates a struct with the given context. The only difference between StructWithCtx and Struct is that the former will validate struct fields with the provided context. Please refer to Struct for the detailed instructions on how to use this function.

func ToFloat

func ToFloat(value interface{}) (float64, error)

ToFloat converts the given value to a float64. An error is returned for all incompatible types.

func ToInt

func ToInt(value interface{}) (int64, error)

ToInt converts the given value to an int64. An error is returned for all incompatible types.

func ToUint

func ToUint(value interface{}) (uint64, error)

ToUint converts the given value to an uint64. An error is returned for all incompatible types.

func Validate

func Validate(lang string, value interface{}, rules ...Rule) error

Validate validates the given value and returns the validation error, if any.

Validate performs validation using the following steps:

  1. For each rule, call its `Validate()` to validate the value. Return if any error is found.
  2. If the value being validated implements `Validatable`, call the value's `Validate()`. Return with the validation result.
  3. If the value being validated is a map/slice/array, and the element type implements `Validatable`, for each element call the element value's `Validate()`. Return with the validation result.

func ValidateWithContext

func ValidateWithContext(ctx context.Context, lang string, value interface{}, rules ...Rule) error

ValidateWithContext validates the given value with the given context and returns the validation error, if any.

ValidateWithContext performs validation using the following steps:

  1. For each rule, call its `ValidateWithContext()` to validate the value if the rule implements `RuleWithContext`. Otherwise call `Validate()` of the rule. Return if any error is found.
  2. If the value being validated implements `ValidatableWithContext`, call the value's `ValidateWithContext()` and return with the validation result.
  3. If the value being validated implements `Validatable`, call the value's `Validate()` and return with the validation result.
  4. If the value being validated is a map/slice/array, and the element type implements `ValidatableWithContext`, for each element call the element value's `ValidateWithContext()`. Return with the validation result.
  5. If the value being validated is a map/slice/array, and the element type implements `Validatable`, for each element call the element value's `Validate()`. Return with the validation result.

Types

type CompareRule

type CompareRule struct {
	// contains filtered or unexported fields
}

CompareRule is a validation rule that checks if a value satisfies the specified threshold requirement.

func Eq

func Eq(num any) CompareRule

func Gt

func Gt(min interface{}) CompareRule

func Gte

func Gte(min interface{}) CompareRule

func Lt

func Lt(max interface{}) CompareRule

func Lte

func Lte(max interface{}) CompareRule

func (CompareRule) Code

func (r CompareRule) Code(code string) Rule

func (CompareRule) Msg

func (r CompareRule) Msg(msg string) Rule

func (CompareRule) Validate

func (r CompareRule) Validate(lang string, value interface{}) error

Validate checks if the given value is valid or not.

type EachRule

type EachRule struct {
	// contains filtered or unexported fields
}

EachRule is a validation rule that validates elements in a map/slice/array using the specified list of rules.

func Each

func Each(rules ...Rule) EachRule

Each returns a validation rule that loops through an iterable (map, slice or array) and validates each value inside with the provided rules. An empty iterable is considered valid. Use the Required rule to make sure the iterable is not empty.

func (EachRule) Code

func (r EachRule) Code(code string) Rule

func (EachRule) Msg

func (r EachRule) Msg(msg string) Rule

func (EachRule) Validate

func (r EachRule) Validate(lang string, value interface{}) error

Validate loops through the given iterable and calls the Ozzo Validate() method for each value.

func (EachRule) ValidateWithContext

func (r EachRule) ValidateWithContext(ctx context.Context, lang string, value interface{}) error

ValidateWithContext loops through the given iterable and calls the Ozzo ValidateWithContext() method for each value.

type EqLengthRule

type EqLengthRule struct {
	// contains filtered or unexported fields
}

func EqLength

func EqLength(l int, rune bool) EqLengthRule

func (EqLengthRule) Code

func (r EqLengthRule) Code(code string) Rule

func (EqLengthRule) Msg

func (r EqLengthRule) Msg(msg string) Rule

func (EqLengthRule) Validate

func (r EqLengthRule) Validate(lang string, value interface{}) error

type Err

type Err struct {
	Key string
	Err error
}

type ErrFieldNotFound

type ErrFieldNotFound int

ErrFieldNotFound is the error that a field cannot be found in the struct.

func (ErrFieldNotFound) Error

func (e ErrFieldNotFound) Error() string

Error returns the error string of ErrFieldNotFound.

type ErrFieldPointer

type ErrFieldPointer int

ErrFieldPointer is the error that a field is not specified as a pointer.

func (ErrFieldPointer) Error

func (e ErrFieldPointer) Error() string

Error returns the error string of ErrFieldPointer.

type Error

type Error interface {
	Error() string
	SetLang(string) Error
	Lang() string
	SetCode(string) Error
	Code() string
	Message() string
	SetMessage(string) Error
	Params() []any
	AddParams(args ...any) Error
}

Error interface represents an validation error

func NewError

func NewError(code, message string) Error

NewError create new validation error.

type ErrorObject

type ErrorObject struct {
	// contains filtered or unexported fields
}

ErrorObject is the default validation error that implements the Error interface.

func (ErrorObject) AddParams

func (e ErrorObject) AddParams(args ...any) Error

AddParams set the error's params.

func (ErrorObject) Code

func (e ErrorObject) Code() string

Code get the error's translation code.

func (ErrorObject) Error

func (e ErrorObject) Error() string

Error returns the error message.

func (ErrorObject) Lang

func (e ErrorObject) Lang() string

func (ErrorObject) Message

func (e ErrorObject) Message() string

Message return the error's message.

func (ErrorObject) Params

func (e ErrorObject) Params() []any

Params returns the error's params.

func (ErrorObject) SetCode

func (e ErrorObject) SetCode(code string) Error

SetCode set the error's translation code.

func (ErrorObject) SetLang

func (e ErrorObject) SetLang(s string) Error

func (ErrorObject) SetMessage

func (e ErrorObject) SetMessage(message string) Error

SetMessage set the error's message.

type Errors

type Errors []Err

Errors represents the validation errors that are indexed by struct field names, map or slice keys. values are Error or Errors (for map, slice and array error value is Errors).

func (Errors) Error

func (es Errors) Error() string

Error returns the error string of Errors.

func (Errors) MarshalJSON

func (es Errors) MarshalJSON() ([]byte, error)

MarshalJSON converts the Errors into a valid JSON.

type FieldRules

type FieldRules struct {
	// contains filtered or unexported fields
}

FieldRules represents a rule set associated with a struct field.

func Field

func Field(fieldPtr interface{}, rules ...Rule) *FieldRules

Field specifies a struct field and the corresponding validation rules. The struct field must be specified as a pointer to it.

type InRule

type InRule struct {
	// contains filtered or unexported fields
}

InRule is a validation rule that validates if a value can be found in the given list of values.

func In

func In(values ...interface{}) InRule

In returns a validation rule that checks if a value can be found in the given list of values. reflect.DeepEqual() will be used to determine if two values are equal. For more details please refer to https://golang.org/pkg/reflect/#DeepEqual An empty value is considered valid. Use the Required rule to make sure a value is not empty.

func (InRule) Code

func (r InRule) Code(code string) Rule

func (InRule) Msg

func (r InRule) Msg(msg string) Rule

func (InRule) Validate

func (r InRule) Validate(lang string, value interface{}) error

Validate checks if the given value is valid or not.

type InternalError

type InternalError interface {
	error
	InternalError() error
}

InternalError represents an error that should NOT be treated as a validation error.

func NewInternalError

func NewInternalError(err error) InternalError

NewInternalError wraps a given error into an InternalError.

type KeyRules

type KeyRules struct {
	// contains filtered or unexported fields
}

KeyRules represents a rule set associated with a map key.

func Key

func Key(key interface{}, rules ...Rule) *KeyRules

Key specifies a map key and the corresponding validation rules.

func (*KeyRules) Code

func (r *KeyRules) Code(code string) Rule

func (*KeyRules) Msg

func (r *KeyRules) Msg(msg string) Rule

func (*KeyRules) Optional

func (r *KeyRules) Optional() *KeyRules

Optional configures the rule to ignore the key if missing.

func (*KeyRules) Validate

func (r *KeyRules) Validate(lang string, value interface{}) error

type MapRule

type MapRule struct {
	// contains filtered or unexported fields
}

MapRule represents a rule set associated with a map.

func Map

func Map(keys ...*KeyRules) MapRule

Map returns a validation rule that checks the keys and values of a map. This rule should only be used for validating maps, or a validation error will be reported. Use Key() to specify map keys that need to be validated. Each Key() call specifies a single key which can be associated with multiple rules. For example,

validation.Map(
    validation.Key("Username", validation.Required),
    validation.Key("Value", validation.Required, validation.RangeLength(5, 10)),
)

A nil value is considered valid. Use the Required rule to make sure a map value is present.

func (MapRule) AllowExtraKeys

func (r MapRule) AllowExtraKeys() MapRule

AllowExtraKeys configures the rule to ignore extra keys.

func (MapRule) Validate

func (r MapRule) Validate(lang string, value interface{}) error

Validate checks if the given value is valid or not.

func (MapRule) ValidateWithContext

func (r MapRule) ValidateWithContext(ctx context.Context, lang string, m interface{}) error

ValidateWithContext checks if the given value is valid or not.

type MatchRule

type MatchRule struct {
	// contains filtered or unexported fields
}

MatchRule is a validation rule that checks if a value matches the specified regular expression.

func Match

func Match(re *regexp.Regexp) MatchRule

Match returns a validation rule that checks if a value matches the specified regular expression. This rule should only be used for validating strings and byte slices, or a validation error will be reported. An empty value is considered valid. Use the Required rule to make sure a value is not empty.

func (MatchRule) Code

func (r MatchRule) Code(code string) Rule

func (MatchRule) Msg

func (r MatchRule) Msg(msg string) Rule

func (MatchRule) Validate

func (r MatchRule) Validate(lang string, value interface{}) error

Validate checks if the given value is valid or not.

type MaxLengthRule

type MaxLengthRule struct {
	// contains filtered or unexported fields
}

func MaxLenRune

func MaxLenRune(max int) MaxLengthRule

func MaxLength

func MaxLength(max int, rune bool) MaxLengthRule

func (MaxLengthRule) Code

func (r MaxLengthRule) Code(code string) Rule

func (MaxLengthRule) Msg

func (r MaxLengthRule) Msg(msg string) Rule

func (MaxLengthRule) Validate

func (r MaxLengthRule) Validate(lang string, value interface{}) error

type MinLengthRule

type MinLengthRule struct {
	// contains filtered or unexported fields
}

func MinLenRune

func MinLenRune(min int) MinLengthRule

func MinLength

func MinLength(min int, rune bool) MinLengthRule

func (MinLengthRule) Code

func (r MinLengthRule) Code(code string) Rule

func (MinLengthRule) Msg

func (r MinLengthRule) Msg(msg string) Rule

func (MinLengthRule) Validate

func (r MinLengthRule) Validate(lang string, value interface{}) error

type MultipleOfRule

type MultipleOfRule struct {
	// contains filtered or unexported fields
}

MultipleOfRule is a validation rule that checks if a value is a multiple of the "base" value.

func MultipleOf

func MultipleOf(base interface{}) MultipleOfRule

MultipleOf returns a validation rule that checks if a value is a multiple of the "base" value. Note that "base" should be of integer type.

func (MultipleOfRule) Code

func (r MultipleOfRule) Code(code string) Rule

func (MultipleOfRule) Error

func (r MultipleOfRule) Error(message string) MultipleOfRule

Error sets the error message for the rule.

func (MultipleOfRule) ErrorObject

func (r MultipleOfRule) ErrorObject(err Error) MultipleOfRule

ErrorObject sets the error struct for the rule.

func (MultipleOfRule) Msg

func (r MultipleOfRule) Msg(msg string) Rule

func (MultipleOfRule) Validate

func (r MultipleOfRule) Validate(lang string, value interface{}) error

Validate checks if the value is a multiple of the "base" value.

type NotInRule

type NotInRule struct {
	// contains filtered or unexported fields
}

NotInRule is a validation rule that checks if a value is absent from the given list of values.

func NotIn

func NotIn(values ...interface{}) NotInRule

NotIn returns a validation rule that checks if a value is absent from the given list of values. Note that the value being checked and the possible range of values must be of the same type. An empty value is considered valid. Use the Required rule to make sure a value is not empty.

func (NotInRule) Code

func (r NotInRule) Code(code string) Rule

func (NotInRule) Msg

func (r NotInRule) Msg(msg string) Rule

func (NotInRule) Validate

func (r NotInRule) Validate(lang string, value interface{}) error

Validate checks if the given value is valid or not.

type RangeLengthRule

type RangeLengthRule struct {
	// contains filtered or unexported fields
}

RangeLengthRule is a validation rule that checks if a value's length is within the specified range.

func RangeLenRune

func RangeLenRune(min, max int) RangeLengthRule

func RangeLength

func RangeLength(min, max int, rune bool) RangeLengthRule

func (RangeLengthRule) Code

func (r RangeLengthRule) Code(code string) Rule

func (RangeLengthRule) Msg

func (r RangeLengthRule) Msg(msg string) Rule

func (RangeLengthRule) Validate

func (r RangeLengthRule) Validate(lang string, value interface{}) error

Validate checks if the given value is valid or not.

type RequiredRule

type RequiredRule struct {
	// contains filtered or unexported fields
}

RequiredRule is a rule that checks if a value is not empty.

func (RequiredRule) Code

func (r RequiredRule) Code(code string) Rule

func (RequiredRule) Msg

func (r RequiredRule) Msg(msg string) Rule

func (RequiredRule) Validate

func (r RequiredRule) Validate(lang string, value interface{}) error

Validate checks if the given value is valid or not.

func (RequiredRule) When

func (r RequiredRule) When(condition bool) RequiredRule

When sets the condition that determines if the validation should be performed.

type Rule

type Rule interface {
	// Validate validates a value and returns a value if validation fails.
	Validate(lang string, value interface{}) error
	Code(code string) Rule
	Msg(msg string) Rule
}

Rule represents a validation rule.

func By

func By(f RuleFunc) Rule

By wraps a RuleFunc into a Rule.

func WithContext

func WithContext(f RuleWithContextFunc) Rule

WithContext wraps a RuleWithContextFunc into a context-aware Rule.

type RuleFunc

type RuleFunc func(lang string, value interface{}) error

RuleFunc represents a validator function. You may wrap it as a Rule by calling By().

type RuleWithContext

type RuleWithContext interface {
	// ValidateWithContext validates a value and returns a value if validation fails.
	ValidateWithContext(ctx context.Context, lang string, value interface{}) error
}

RuleWithContext represents a context-aware validation rule.

type RuleWithContextFunc

type RuleWithContextFunc func(ctx context.Context, lang string, value interface{}) error

RuleWithContextFunc represents a validator function that is context-aware. You may wrap it as a Rule by calling WithContext().

type StringRule

type StringRule struct {
	// contains filtered or unexported fields
}

StringRule is a rule that checks a string variable using a specified stringValidator.

func String

func String(validator stringValidator, err Error) StringRule

func StringCode

func StringCode(validator stringValidator, code string) StringRule

func StringMsg

func StringMsg(validator stringValidator, msg string) StringRule

func (StringRule) Code

func (r StringRule) Code(code string) Rule

func (StringRule) Error

func (r StringRule) Error(message string) StringRule

Error sets the error message for the rule.

func (StringRule) ErrorObject

func (r StringRule) ErrorObject(err Error) StringRule

ErrorObject sets the error struct for the rule.

func (StringRule) Msg

func (r StringRule) Msg(msg string) Rule

func (StringRule) Validate

func (r StringRule) Validate(lang string, value interface{}) error

Validate checks if the given value is valid or not.

type Translator

type Translator interface {
	// Default return the default language used of the translator.
	Default() string
	Get(lang string, key string, params ...any) string
}

type Validatable

type Validatable interface {
	// Validate validates the data and returns an error if validation fails.
	Validate(lang string) error
}

Validatable is the interface indicating the type implementing it supports data validation.

type ValidatableWithContext

type ValidatableWithContext interface {
	// ValidateWithContext validates the data with the given context and returns an error if validation fails.
	ValidateWithContext(ctx context.Context, lang string) error
}

ValidatableWithContext is the interface indicating the type implementing it supports context-aware data validation.

type WhenRule

type WhenRule struct {
	// contains filtered or unexported fields
}

WhenRule is a validation rule that executes the given list of rules when the condition is true.

func When

func When(condition bool, rules ...Rule) WhenRule

When returns a validation rule that executes the given list of rules when the condition is true.

func (WhenRule) Code

func (r WhenRule) Code(code string) Rule

func (WhenRule) Else

func (r WhenRule) Else(rules ...Rule) WhenRule

Else returns a validation rule that executes the given list of rules when the condition is false.

func (WhenRule) Msg

func (r WhenRule) Msg(msg string) Rule

func (WhenRule) Validate

func (r WhenRule) Validate(lang string, value interface{}) error

Validate checks if the condition is true and if so, it validates the value using the specified rules.

func (WhenRule) ValidateWithContext

func (r WhenRule) ValidateWithContext(ctx context.Context, lang string, value interface{}) error

ValidateWithContext checks if the condition is true and if so, it validates the value using the specified rules.

Directories

Path Synopsis
Package is provides a list of commonly used string vax rules.
Package is provides a list of commonly used string vax rules.

Jump to

Keyboard shortcuts

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