typutil

package module
v0.2.19 Latest Latest
Warning

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

Go to latest
Published: Sep 11, 2024 License: MIT Imports: 18 Imported by: 11

README

GoDoc

type conversion utils

This is useful when dealing with json parsed types for example.

Assign

Assign is a tool that allows assigning any value to any other value and let the library handle the conversion in a somewhat intelligent way.

For example a map[string]any can be assigned to a struct (json tags will be taken into account for variable names) and values will be converted.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrAssignDestNotPointer      = errors.New("assign destination must be a pointer")
	ErrAssignImpossible          = errors.New("the requested assign is not possible")
	ErrNilPointerRead            = errors.New("attempt to read from a nil pointer")
	ErrEmptyValue                = errors.New("validator: value must not be empty")
	ErrDestinationNotAddressable = errors.New("assign: destination cannot be addressed")
	ErrStructPtrRequired         = errors.New("parameter must be a pointer to a struct")
	ErrBadOffset                 = errors.New("bad offset type")
	ErrMissingArgs               = errors.New("missing arguments")
)

Functions

func As added in v0.2.5

func As[T any](v any) (T, error)

func AsBool

func AsBool(v any) bool

AsBool loosely converts the value to a boolean

func AsByteArray added in v0.1.14

func AsByteArray(v any) ([]byte, bool)

AsByteArray will loosely convert the given value to a byte array

func AsFloat

func AsFloat(v any) (float64, bool)

AsFloat loosely converts the given value to a float64

func AsInt

func AsInt(v any) (int64, bool)

AsInt loosely converts the given value to a int64

func AsNumber

func AsNumber(v any) (any, bool)

AsNumber will loosely convert n in one of int64, uint64 or float64 depending on what feels best

func AsString added in v0.1.2

func AsString(v any) (string, bool)

AsString will loosely converts the given value to a string

func AsUint

func AsUint(v any) (uint64, bool)

AsUint loosely converts the given value to a uint64

func Assign added in v0.1.5

func Assign(dst, src any) error

Assign sets dst to the value of src. In case src is any kind of container, a shallow copy is performed

func AssignReflect added in v0.1.19

func AssignReflect(vdst, vsrc reflect.Value) error

func BaseType added in v0.1.4

func BaseType(v any) any

BaseType attempts to convert v into its base type, that is if v is a type that is defined as `type foo string`, a simple string will be returned.

func Call added in v0.2.19

func Call[T any](s *Callable, ctx context.Context, arg ...any) (T, error)

func DeepClone added in v0.2.9

func DeepClone[T any](v T) T

DeepClone performs a deep duplication of the provided argument, and returns the newly created object

func DeepCloneReflect added in v0.2.9

func DeepCloneReflect(src reflect.Value) reflect.Value

DeepCloneReflect performs a deep duplication of the provided reflect.Value

func Equal added in v0.1.17

func Equal(a, b any) bool

Equal returns true if a and b are somewhat equal

func Flatten added in v0.2.8

func Flatten(a any) any

Flatten transforms a into a simple interface, even if it is contains multiple levels. *string becomes string (or nil if it's nil), etc

func IsNil added in v0.2.8

func IsNil(v any) bool

IsNil recursively checks if v is nil, even if it is a pointer of an interface of a ...

func Math added in v0.1.16

func Math(mathop string, a, b any) (any, bool)

Math performs a mathematical operation on two variables of any type and returns a numeric type and true if everything went fine.

For example Math("+", 40.000, "2") will return float64(42)

For now if passed any float value, the function will always return a float value in the end. This may change in the future.

func OffsetGet added in v0.2.6

func OffsetGet(ctx context.Context, v any, offset string) (any, error)

OffsetGet returns v[offset] dealing with various case of figure. ctx will be passed to some methods handling it

func SetValidator added in v0.1.6

func SetValidator[T any](validator string, fnc func(T) error)

SetValidator sets the given function as validator with the given name. This should be typically called in init()

func SetValidatorArgs added in v0.1.13

func SetValidatorArgs(validator string, fnc any)

func ToType deprecated added in v0.1.17

func ToType(ref, v any) (any, bool)

ToType returns v converted to ref's type

Deprecated: Use As[T](v) instead

func Validate added in v0.1.10

func Validate(obj any) error

Validate accept any struct as argument and returns if the struct is valid. The parameter should be a pointer to the struct so validators can edit values.

Types

type AssignableTo added in v0.2.18

type AssignableTo interface {
	AssignTo(any) error
}

AssignableTo is an interface that can be implemented by objects able to assign themselves to values. Do not use Assign() inside AssignTo or you risk generating an infinite loop.

This looks a bit like sql's Valuer, except instead of a returning a any interface, the parameter is a pointer to the target type. Typically, Unmarshal will be used in here.

type Callable added in v0.2.19

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

func Func added in v0.2.19

func Func(method any) *Callable

Func returns a Callable object for a func that accepts a context.Context and/or any number of arguments

func (*Callable) ArgKind added in v0.2.19

func (s *Callable) ArgKind(n int) reflect.Kind

func (*Callable) Call added in v0.2.19

func (s *Callable) Call(ctx context.Context) (any, error)

Call invokes the func without any argument. If the func expects some kind of argument, Call will attempt to get input_json from the context, and if obtained it will be parsed and passed as argument to the method.

func (*Callable) CallArg added in v0.2.19

func (s *Callable) CallArg(ctx context.Context, arg ...any) (any, error)

CallArg calls the method with the specified arguments. If less arguments are provided than required, an error will be raised.

func (*Callable) IsStringArg added in v0.2.19

func (s *Callable) IsStringArg(n int) bool

type RawJsonMessage added in v0.2.18

type RawJsonMessage []byte

RawJsonMessage is similar to json.RawMessage, but also implements

func (RawJsonMessage) AssignTo added in v0.2.18

func (m RawJsonMessage) AssignTo(v any) error

AssignTo will unmarshal the raw json message into v

func (RawJsonMessage) MarshalJSON added in v0.2.18

func (m RawJsonMessage) MarshalJSON() ([]byte, error)

func (*RawJsonMessage) UnmarshalJSON added in v0.2.18

func (m *RawJsonMessage) UnmarshalJSON(data []byte) error

type Signed added in v0.2.17

type Signed interface {
	~int | ~int8 | ~int16 | ~int32 | ~int64
}

type Unsigned added in v0.2.17

type Unsigned interface {
	~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr
}

Jump to

Keyboard shortcuts

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