Bump github.com/gookit/config/v2 from 2.2.3 to 2.2.4
Bumps [github.com/gookit/config/v2](https://github.com/gookit/config) from 2.2.3 to 2.2.4. - [Release notes](https://github.com/gookit/config/releases) - [Commits](https://github.com/gookit/config/compare/v2.2.3...v2.2.4) --- updated-dependencies: - dependency-name: github.com/gookit/config/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
committed by
Ralf Haferkamp
parent
30784affc4
commit
0df009eae0
+1
-1
@@ -52,7 +52,7 @@ func (as *Aliases) HasAlias(alias string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// ResolveAlias by given name.
|
||||
// ResolveAlias by given name. if not exists, return the alias self
|
||||
func (as *Aliases) ResolveAlias(alias string) string {
|
||||
if name, ok := as.mapping[alias]; ok {
|
||||
return name
|
||||
|
||||
+16
-13
@@ -12,15 +12,12 @@ import (
|
||||
// LiteData simple map[string]any struct. no lock
|
||||
type LiteData = Data
|
||||
|
||||
// NewLiteData create, not lock
|
||||
// NewLiteData create, not locked
|
||||
func NewLiteData(data map[string]any) *Data {
|
||||
if data == nil {
|
||||
data = make(map[string]any)
|
||||
}
|
||||
|
||||
return &LiteData{
|
||||
data: data,
|
||||
}
|
||||
return &LiteData{data: data}
|
||||
}
|
||||
|
||||
/*************************************************************
|
||||
@@ -82,7 +79,7 @@ func (d *Data) ResetData() {
|
||||
|
||||
// Merge load new data
|
||||
func (d *Data) Merge(mp map[string]any) {
|
||||
d.data = maputil.SimpleMerge(d.data, mp)
|
||||
d.data = maputil.SimpleMerge(mp, d.data)
|
||||
}
|
||||
|
||||
// Set value to data
|
||||
@@ -151,21 +148,27 @@ func (d *Data) String() string {
|
||||
return maputil.ToString(d.data)
|
||||
}
|
||||
|
||||
// OrderedMap data TODO
|
||||
type OrderedMap struct {
|
||||
// OrderedData data TODO
|
||||
type OrderedData struct {
|
||||
maputil.Data
|
||||
len int
|
||||
cap int
|
||||
keys []string
|
||||
// vals []any
|
||||
}
|
||||
|
||||
// NewOrderedMap instance.
|
||||
func NewOrderedMap(len int) *OrderedMap {
|
||||
return &OrderedMap{len: len}
|
||||
// NewOrderedData instance.
|
||||
func NewOrderedData(cap int) *OrderedData {
|
||||
return &OrderedData{cap: cap, Data: make(maputil.Data, cap)}
|
||||
}
|
||||
|
||||
// Load data
|
||||
func (om *OrderedData) Load(data map[string]any) {
|
||||
om.Data.Load(data)
|
||||
om.keys = om.Data.Keys()
|
||||
}
|
||||
|
||||
// Set key and value to map
|
||||
func (om *OrderedMap) Set(key string, val any) {
|
||||
func (om *OrderedData) Set(key string, val any) {
|
||||
om.keys = append(om.keys, key)
|
||||
om.Data.Set(key, val)
|
||||
}
|
||||
|
||||
+8
-3
@@ -4,7 +4,7 @@ import (
|
||||
"errors"
|
||||
"reflect"
|
||||
|
||||
"github.com/gookit/goutil/internal/comfunc"
|
||||
"github.com/gookit/goutil/internal/varexpr"
|
||||
"github.com/gookit/goutil/reflects"
|
||||
"github.com/gookit/goutil/strutil"
|
||||
)
|
||||
@@ -89,7 +89,7 @@ func initDefaults(rv reflect.Value, opt *InitOptions) error {
|
||||
continue
|
||||
}
|
||||
|
||||
// skip on field has value
|
||||
// Skip init on field has value. but will check slice and pointer field
|
||||
if !fv.IsZero() {
|
||||
// special: handle for pointer struct field
|
||||
if fv.Kind() == reflect.Pointer {
|
||||
@@ -140,6 +140,11 @@ func initDefaults(rv reflect.Value, opt *InitOptions) error {
|
||||
|
||||
// init sub struct in slice. like `[]SubStruct` or `[]*SubStruct`
|
||||
if el.Kind() == reflect.Struct {
|
||||
// up: if slice elem is struct and slice len=0, will be skip init default value
|
||||
if fv.Len() == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
// make sub-struct and init. like: `SubStruct`
|
||||
subFv := reflect.New(el)
|
||||
subFvE := subFv.Elem()
|
||||
@@ -174,7 +179,7 @@ func initDefaultValue(fv reflect.Value, val string, parseEnv bool) error {
|
||||
|
||||
// parse env var
|
||||
if parseEnv {
|
||||
val = comfunc.ParseEnvVar(val, nil)
|
||||
val = varexpr.SafeParse(val)
|
||||
}
|
||||
|
||||
var anyVal any = val
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
package structs
|
||||
|
||||
// SMap simple map[string]string struct.
|
||||
// SMap simple map[string]string struct. TODO
|
||||
type SMap struct {
|
||||
data map[string]string
|
||||
data map[string]string //lint:ignore U1000 for unused
|
||||
}
|
||||
|
||||
-1
@@ -207,7 +207,6 @@ func ParseTagValueDefault(field, tagVal string) (mp maputil.SMap, err error) {
|
||||
// ParseTagValueQuick quick parse tag value string by sep(;)
|
||||
func ParseTagValueQuick(tagVal string, defines []string) maputil.SMap {
|
||||
parseFn := ParseTagValueDefine(";", defines)
|
||||
|
||||
mp, _ := parseFn("", tagVal)
|
||||
return mp
|
||||
}
|
||||
|
||||
+33
-7
@@ -1,14 +1,23 @@
|
||||
package structs
|
||||
|
||||
import "reflect"
|
||||
import (
|
||||
"errors"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
// Wrapper struct for read or set field value TODO
|
||||
// Wrapper struct for read or set field value
|
||||
type Wrapper struct {
|
||||
// src any // source data struct
|
||||
// src any // source struct
|
||||
|
||||
// reflect.Value of source struct
|
||||
rv reflect.Value
|
||||
|
||||
// FieldTagName field name for read/write value. default tag: json
|
||||
FieldTagName string
|
||||
|
||||
// caches for field rv and name and tag name TODO
|
||||
fieldNames []string //lint:ignore U1000 for unused
|
||||
fvCacheMap map[string]reflect.Value //lint:ignore U1000 for unused
|
||||
}
|
||||
|
||||
// Wrap create a struct wrapper
|
||||
@@ -27,11 +36,10 @@ func WrapValue(rv reflect.Value) *Wrapper {
|
||||
if rv.Kind() != reflect.Struct {
|
||||
panic("must be provider an struct value")
|
||||
}
|
||||
|
||||
return &Wrapper{rv: rv}
|
||||
}
|
||||
|
||||
// Get field value by name
|
||||
// Get field value by name, name allow use dot syntax.
|
||||
func (r *Wrapper) Get(name string) any {
|
||||
val, ok := r.Lookup(name)
|
||||
if !ok {
|
||||
@@ -40,12 +48,30 @@ func (r *Wrapper) Get(name string) any {
|
||||
return val
|
||||
}
|
||||
|
||||
// Lookup field value by name
|
||||
// Lookup field value by name, name allow use dot syntax.
|
||||
func (r *Wrapper) Lookup(name string) (val any, ok bool) {
|
||||
fv := r.rv.FieldByName(name)
|
||||
if !fv.IsValid() {
|
||||
return
|
||||
}
|
||||
|
||||
return fv.Interface(), true
|
||||
if fv.CanInterface() {
|
||||
return fv.Interface(), true
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Set field value by name, name allow use dot syntax.
|
||||
func (r *Wrapper) Set(name string, val any) error {
|
||||
fv := r.rv.FieldByName(name)
|
||||
if !fv.IsValid() {
|
||||
return errors.New("field not found")
|
||||
}
|
||||
|
||||
if !fv.CanSet() {
|
||||
return errors.New("field can not set value")
|
||||
}
|
||||
|
||||
fv.Set(reflect.ValueOf(val))
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user