valid

package module
v0.0.0-...-0158eb9 Latest Latest
Warning

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

Go to latest
Published: Jun 9, 2024 License: MIT Imports: 2 Imported by: 0

README

go_validated_types

Create types that self-validate in debug builds, without runtime overhead in release builds.

Compilation with go build -tag debug my_own_package will compile validation logic into the validated types. Note that below example incurs 20-30x runtime overhead.

package main

import "github.com/JonasMuehlmann/go_validated_types"

func main()  {
    // Create a new range int with a min of 0 and a max of 10 and current value 5
    i := NewRangeInt(5,0,10)
	i.Set(7)  // fine
	i.Set(11) // panic
}

Compilation without the debug build tag (go build my_own_package) will not compile validation logic into the validated types. The resulting types are wrappers so thin, that the above code becomes binary equivalent to the following:

package main

import "github.com/JonasMuehlmann/go_validated_types"

func main()  {
	i := 5
	i = 7
	i = 11
}

Documentation

Index

Examples

Constants

View Source
const DEBUG = false

Variables

This section is empty.

Functions

This section is empty.

Types

type DecreasingNumber

type DecreasingNumber[T Number] struct {
	ValidatedNumber[T]
}

func NewDecreasingNumber

func NewDecreasingNumber[T Number](value T) DecreasingNumber[T]

func NewDecreasingNumberBare

func NewDecreasingNumberBare[T Number]() DecreasingNumber[T]

func (*DecreasingNumber[T]) Set

func (v *DecreasingNumber[T]) Set(value T)

type IncreasingNumber

type IncreasingNumber[T Number] struct {
	ValidatedNumber[T]
}

func NewIncreasingNumber

func NewIncreasingNumber[T Number](value T) IncreasingNumber[T]

func NewIncreasingNumberBare

func NewIncreasingNumberBare[T Number]() IncreasingNumber[T]

func (*IncreasingNumber[T]) Set

func (v *IncreasingNumber[T]) Set(value T)

type NonDecreasingNumber

type NonDecreasingNumber[T Number] struct {
	ValidatedNumber[T]
}

func NewNonDecreasingNumber

func NewNonDecreasingNumber[T Number](value T) NonDecreasingNumber[T]

func NewNonDecreasingNumberBare

func NewNonDecreasingNumberBare[T Number]() NonDecreasingNumber[T]

func (*NonDecreasingNumber[T]) Set

func (v *NonDecreasingNumber[T]) Set(value T)

type NonEmptyString

type NonEmptyString struct {
	ValidatedString
}

func NewNonEmptyString

func NewNonEmptyString(value string, prefix string) NonEmptyString

type NonIncreasingNumber

type NonIncreasingNumber[T Number] struct {
	ValidatedNumber[T]
}

func NewNonIncreasingNumber

func NewNonIncreasingNumber[T Number](value T) NonIncreasingNumber[T]

func NewNonIncreasingNumberBare

func NewNonIncreasingNumberBare[T Number]() NonIncreasingNumber[T]

func (*NonIncreasingNumber[T]) Set

func (v *NonIncreasingNumber[T]) Set(value T)

type NopNumber

type NopNumber[T Number] struct {
	ValidatedNumber[T]
}

func NewNopNumber

func NewNopNumber[T Number](value T) NopNumber[T]

func NewNopNumberBare

func NewNopNumberBare[T Number]() NopNumber[T]

type Number

type Number interface {
	constraints.Integer | constraints.Float
}

type PrefixString

type PrefixString struct {
	ValidatedString
}

func NewPrefixString

func NewPrefixString(value string, prefix string) PrefixString

type RangeNumber

type RangeNumber[T Number] struct {
	ValidatedNumber[T]
}

func NewRangeNumber

func NewRangeNumber[T Number](value T, min T, max T) RangeNumber[T]

func NewRangeNumberBare

func NewRangeNumberBare[T Number](min T, max T) RangeNumber[T]

type SetOnce

type SetOnce[T any] struct {
	ValidatedTypeBase[T]
}

func NewSetOnce

func NewSetOnce[T any](value T) SetOnce[T]
Example
if !DEBUG {
	panic(MessageRequireDebug)
}

i := NewSetOnce(42)
fmt.Println(i.Get())
Output:

42

func NewSetOnceBare

func NewSetOnceBare[T any]() SetOnce[T]
Example
if !DEBUG {
	panic(MessageRequireDebug)
}

defer func() {
	if r := recover(); r != nil {
		fmt.Println("panic:", r)
	}
}()

i := NewSetOnceBare[int]()
fmt.Println(i.Get())
Output:

panic: Value has not been set

func (*SetOnce[T]) Get

func (v *SetOnce[T]) Get() T

func (*SetOnce[T]) Set

func (v *SetOnce[T]) Set(value T)
Example
if !DEBUG {
	panic(MessageRequireDebug)
}

i := NewSetOnceBare[int]()
i.Set(43)
fmt.Println(i.Get())
Output:

43
Example (SetTwice)
if !DEBUG {
	panic(MessageRequireDebug)
}

defer func() {
	if r := recover(); r != nil {
		fmt.Println("panic:", r)
	}
}()

i := NewSetOnce(42)
i.Set(43)
Output:

panic: Value can only be set once

type SubstringString

type SubstringString struct {
	ValidatedString
}

func NewSubstringString

func NewSubstringString(value string, substring string) SubstringString

type SuffixString

type SuffixString struct {
	ValidatedString
}

func NewSuffixString

func NewSuffixString(value string, suffix string) SuffixString

type TrimmedString

type TrimmedString struct {
	ValidatedString
}

func NewTrimmedString

func NewTrimmedString(value string) TrimmedString

func NewTrimmedStringBare

func NewTrimmedStringBare() TrimmedString

type ValidatedNumber

type ValidatedNumber[T Number] struct {
	ValidatedType[T]
	// contains filtered or unexported fields
}

func NewValidatedNumber

func NewValidatedNumber[T Number](value T, validator Validator[T]) ValidatedNumber[T]

func NewValidatedNumberBare

func NewValidatedNumberBare[T Number](validator Validator[T]) ValidatedNumber[T]

func (*ValidatedNumber[T]) Get

func (v *ValidatedNumber[T]) Get() T

func (*ValidatedNumber[T]) Set

func (v *ValidatedNumber[T]) Set(value T)

type ValidatedString

type ValidatedString struct {
	ValidatedType[string]
	// contains filtered or unexported fields
}

func NewValidatedString

func NewValidatedString(value string, validator Validator[string]) ValidatedString

func NewValidatedStringBare

func NewValidatedStringBare(validator Validator[string]) ValidatedString

func (*ValidatedString) Get

func (v *ValidatedString) Get() string

func (*ValidatedString) Set

func (v *ValidatedString) Set(value string)

type ValidatedType

type ValidatedType[T any] interface {
	// Validate checks if the value is valid
	Validate()
	// SetValidator sets the validator
	SetValidator(Validator[T])
	// GetValidator returns the validator
	GetValidator() Validator[T]
	// Get returns the value
	Get() T
	// Set sets the value and validates it
	Set(T)
}

type ValidatedTypeBase

type ValidatedTypeBase[T any] struct {
	// contains filtered or unexported fields
}

func NewValidatedTypeBase

func NewValidatedTypeBase[T any](value T) ValidatedTypeBase[T]

func NewValidatedTypeBaseBare

func NewValidatedTypeBaseBare[T any]() ValidatedTypeBase[T]

func (ValidatedTypeBase[T]) Get

func (v ValidatedTypeBase[T]) Get() T

func (ValidatedTypeBase[T]) GetValidator

func (v ValidatedTypeBase[T]) GetValidator() Validator[T]

func (*ValidatedTypeBase[T]) Set

func (v *ValidatedTypeBase[T]) Set(t T)

func (*ValidatedTypeBase[T]) SetValidator

func (v *ValidatedTypeBase[T]) SetValidator(validator Validator[T])

func (ValidatedTypeBase[T]) Validate

func (v ValidatedTypeBase[T]) Validate()

type Validator

type Validator[T any] func(T)

func MakeContradictionValidator

func MakeContradictionValidator[T any](message string) Validator[T]

MakeContradictionValidator returns a validator that always fails.

func MakeDefaultContradictionValidator

func MakeDefaultContradictionValidator[T any]() Validator[T]

MakeDefaultContradictionValidator returns a validator that always fails.

func MakeDefaultRangeValidator

func MakeDefaultRangeValidator[T constraints.Ordered](min T, max T) Validator[T]

MakeDefaultRangeValidator returns a validator that checks if a value is within a range.

func MakeNilValidator

func MakeNilValidator[T any]() Validator[T]

MakeNilValidator returns a nil validator.

func MakeNonEmptyStringValidator

func MakeNonEmptyStringValidator() Validator[string]

func MakePrefixValidator

func MakePrefixValidator(prefix string) Validator[string]

func MakeRangeValidator

func MakeRangeValidator[T constraints.Ordered](min T, max T, message string) Validator[T]

MakeRangeValidator returns a validator that checks if a value is within a range.

func MakeSubstringValidator

func MakeSubstringValidator(substring string) Validator[string]

func MakeSuffixValidator

func MakeSuffixValidator(suffix string) Validator[string]

func MakeTautologyValidator

func MakeTautologyValidator[T any]() Validator[T]

MakeTautologyValidator returns a validator that always passes.

func MakeTrimmedValidator

func MakeTrimmedValidator() Validator[string]

Jump to

Keyboard shortcuts

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