ref

package
v1.0.16 Latest Latest
Warning

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

Go to latest
Published: May 8, 2024 License: MIT Imports: 9 Imported by: 0

Documentation

Overview

implements extensions to the standard reflect lib suitable for implementing marshalling and unmarshalling packages. The main Mapper type allows for Go-compatible named attribute access, including accessing embedded struct attributes and the ability to use functions and struct tags to customize field names.

Index

Constants

This section is empty.

Variables

View Source
var (
	TypeString   = reflect.TypeOf("")
	TypeBool     = reflect.TypeOf(false)
	TypeByte     = reflect.TypeOf(byte(0))
	TypeRune     = reflect.TypeOf(rune(0))
	TypeInt      = reflect.TypeOf(int(0))
	TypeInt32    = reflect.TypeOf(int32(0))
	TypeInt64    = reflect.TypeOf(int64(0))
	TypeFloat32  = reflect.TypeOf(float32(0))
	TypeFloat64  = reflect.TypeOf(float64(0))
	TypeDuration = reflect.TypeOf(time.Duration(0))
	TypeTime     = reflect.TypeOf(time.Time{})
)

Functions

func ArrayGet added in v1.0.10

func ArrayGet(a any, idxs ...int) (any, error)

ArrayGet getting value from array or slice by index usage:

a := [][]string{
    { "0,0", "0,1" },
    { "1,0", "1,1" },
}

{{ArrayGet a 0 1 }} // return "0,1"

func ArrayLen added in v1.0.15

func ArrayLen(a any) (int, error)

func ArrayOf added in v1.0.10

func ArrayOf[T any](args ...T) []T

ArrayOf returns a []T{args[0], args[1], ...}

func ArraySet added in v1.0.10

func ArraySet(a any, i int, v any) (any, error)

ArraySet set value to the array or slice by index

func Convert

func Convert(v any, t reflect.Type) (cv any, err error)

Convert convert the value v to the specified Type t

func Deref added in v1.0.15

func Deref(t reflect.Type) reflect.Type

Deref is Indirect for reflect.Types

func FieldByIndexes added in v1.0.15

func FieldByIndexes(v reflect.Value, indexes []int) reflect.Value

FieldByIndexes returns a value for the field given by the struct traversal for the given value.

func FieldByIndexesReadOnly added in v1.0.15

func FieldByIndexesReadOnly(v reflect.Value, indexes []int) reflect.Value

FieldByIndexesReadOnly returns a value for a particular struct traversal, but is not concerned with allocating nil pointers because the value is going to be used for reading and not setting.

func IsArrayType added in v1.0.10

func IsArrayType(v any) bool

IsArrayType return true if v is a map

func IsComplexType

func IsComplexType(v any) bool

IsComplexType return true if v is a complex

func IsFloatType

func IsFloatType(v any) bool

IsFloatType return true if v is a float

func IsIntType

func IsIntType(v any) bool

IsIntType return true if v is an integer

func IsMapType added in v1.0.10

func IsMapType(v any) bool

IsMapType return true if v is a map

func MapGet added in v1.0.10

func MapGet(dict any, keys ...any) (any, error)

MapGet getting value from map by keys usage:

m := map[string]any{
    "a": 1,
    "1": map[string]float64{
        "c": 4,
    },
}

{{MapGet m "a" }} // return 1 {{MapGet m 1 "c" }} // return 4

func MapSet added in v1.0.10

func MapSet(dict any, key, val any) (any, error)

MapSet setting value to the map

func SetProperty added in v1.0.10

func SetProperty(o any, k string, v any) (err error)

Types

type FieldInfo added in v1.0.15

type FieldInfo struct {
	Index    []int
	Path     string
	Field    reflect.StructField
	Zero     reflect.Value
	Name     string
	Options  map[string]string
	Embedded bool
	Children []*FieldInfo
	Parent   *FieldInfo
}

A FieldInfo is metadata for a struct field.

type Mapper added in v1.0.15

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

Mapper is a general purpose mapper of names to struct fields. A Mapper behaves like most marshallers in the standard library, obeying a field tag for name mapping but also providing a basic transform function.

func NewMapper added in v1.0.15

func NewMapper(tagName string) *Mapper

NewMapper returns a new mapper using the tagName as its struct field tag. If tagName is the empty string, it is ignored.

func NewMapperFunc added in v1.0.15

func NewMapperFunc(tagName string, f func(string) string) *Mapper

NewMapperFunc returns a new mapper which optionally obeys a field tag and a struct field name mapper func given by f. Tags will take precedence, but for any other field, the mapped name will be f(field.Name)

func NewMapperTagFunc added in v1.0.15

func NewMapperTagFunc(tagName string, mapFunc, tagMapFunc func(string) string) *Mapper

NewMapperTagFunc returns a new mapper which contains a mapper for field names AND a mapper for tag values. This is useful for tags like json which can have values like "name,omitempty".

func (*Mapper) FieldByName added in v1.0.15

func (m *Mapper) FieldByName(v reflect.Value, name string) reflect.Value

FieldByName returns a field by its mapped name as a reflect.Value. Panics if v's Kind is not Struct or v is not Indirectable to a struct Kind. Returns zero Value if the name is not found.

func (*Mapper) FieldMap added in v1.0.15

func (m *Mapper) FieldMap(v reflect.Value) map[string]reflect.Value

FieldMap returns the mapper's mapping of field names to reflect values. Panics if v's Kind is not Struct, or v is not Indirectable to a struct kind.

func (*Mapper) FieldsByName added in v1.0.15

func (m *Mapper) FieldsByName(v reflect.Value, names []string) []reflect.Value

FieldsByName returns a slice of values corresponding to the slice of names for the value. Panics if v's Kind is not Struct or v is not Indirectable to a struct Kind. Returns zero Value for each name not found.

func (*Mapper) TraversalsByName added in v1.0.15

func (m *Mapper) TraversalsByName(t reflect.Type, names []string) [][]int

TraversalsByName returns a slice of int slices which represent the struct traversals for each mapped name. Panics if t is not a struct or Indirectable to a struct. Returns empty int slice for each name not found.

func (*Mapper) TraversalsByNameFunc added in v1.0.15

func (m *Mapper) TraversalsByNameFunc(t reflect.Type, names []string, fn func(int, []int) error) error

TraversalsByNameFunc traverses the mapped names and calls fn with the index of each name and the struct traversal represented by that name. Panics if t is not a struct or Indirectable to a struct. Returns the first error returned by fn or nil.

func (*Mapper) TypeMap added in v1.0.15

func (m *Mapper) TypeMap(t reflect.Type) *StructMap

TypeMap returns a mapping of field strings to int slices representing the traversal down the struct to reach the field.

type StructMap added in v1.0.15

type StructMap struct {
	Tree  *FieldInfo
	Index []*FieldInfo
	Paths map[string]*FieldInfo
	Names map[string]*FieldInfo
}

A StructMap is an index of field metadata for a struct.

func (StructMap) GetByPath added in v1.0.15

func (f StructMap) GetByPath(path string) *FieldInfo

GetByPath returns a *FieldInfo for a given string path.

func (StructMap) GetByTraversal added in v1.0.15

func (f StructMap) GetByTraversal(index []int) *FieldInfo

GetByTraversal returns a *FieldInfo for a given integer path. It is analogous to reflect.FieldByIndex, but using the cached traversal rather than re-executing the reflect machinery each time.

Jump to

Keyboard shortcuts

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