Help us shape the future of Go! Take the 2026 Go Developer Survey

aghalg

package
v0.0.2 Latest Latest
Warning

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

Go to latest
Published: Oct 1, 2023 License: GPL-3.0 Imports: 6 Imported by: 0

Documentation

Overview

Package aghalg contains common generic algorithms and data structures.

TODO(a.garipov): Move parts of this into golibs.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Coalesce

func Coalesce[T comparable](values ...T) (res T)

Coalesce returns the first non-zero value. It is named after function COALESCE in SQL. If values or all its elements are empty, it returns a zero value.

T is comparable, because Go currently doesn't have a comparableWithZeroValue constraint.

TODO(a.garipov): Think of ways to merge with CoalesceSlice.

func CoalesceSlice

func CoalesceSlice[E any, S []E](values ...S) (res S)

CoalesceSlice returns the first non-zero value. It is named after function COALESCE in SQL. If values or all its elements are empty, it returns nil.

TODO(a.garipov): Think of ways to merge with Coalesce.

Types

type NullBool

type NullBool uint8

NullBool is a nullable boolean. Use these in JSON requests and responses instead of pointers to bool.

const (
	NBNull NullBool = iota
	NBTrue
	NBFalse
)

NullBool values

func BoolToNullBool

func BoolToNullBool(cond bool) (nb NullBool)

BoolToNullBool converts a bool into a NullBool.

func (NullBool) MarshalJSON

func (nb NullBool) MarshalJSON() (b []byte, err error)

MarshalJSON implements the json.Marshaler interface for NullBool.

func (NullBool) String

func (nb NullBool) String() (s string)

String implements the fmt.Stringer interface for NullBool.

func (*NullBool) UnmarshalJSON

func (nb *NullBool) UnmarshalJSON(b []byte) (err error)

UnmarshalJSON implements the json.Unmarshaler interface for *NullBool.

type UniqChecker

type UniqChecker[T constraints.Ordered] map[T]int64

UniqChecker allows validating uniqueness of comparable items.

TODO(a.garipov): The Ordered constraint is only really necessary in Validate. Consider ways of making this constraint comparable instead.

func (UniqChecker[T]) Add

func (uc UniqChecker[T]) Add(elems ...T)

Add adds a value to the validator. v must not be nil.

func (UniqChecker[T]) Merge

func (uc UniqChecker[T]) Merge(other UniqChecker[T]) (merged UniqChecker[T])

Merge returns a checker containing data from both uc and other.

func (UniqChecker[T]) Validate

func (uc UniqChecker[T]) Validate() (err error)

Validate returns an error enumerating all elements that aren't unique.

Jump to

Keyboard shortcuts

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