Bump github.com/gookit/config/v2 from 2.1.8 to 2.2.2
Bumps [github.com/gookit/config/v2](https://github.com/gookit/config) from 2.1.8 to 2.2.2. - [Release notes](https://github.com/gookit/config/releases) - [Commits](https://github.com/gookit/config/compare/v2.1.8...v2.2.2) --- updated-dependencies: - dependency-name: github.com/gookit/config/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
committed by
Ralf Haferkamp
parent
03045c5ccc
commit
5ebc596352
+51
@@ -0,0 +1,51 @@
|
||||
package structs
|
||||
|
||||
import "reflect"
|
||||
|
||||
// Wrapper struct for read or set field value TODO
|
||||
type Wrapper struct {
|
||||
// src any // source data struct
|
||||
rv reflect.Value
|
||||
|
||||
// FieldTagName field name for read/write value. default tag: json
|
||||
FieldTagName string
|
||||
}
|
||||
|
||||
// Wrap create a struct wrapper
|
||||
func Wrap(src any) *Wrapper {
|
||||
return NewWrapper(src)
|
||||
}
|
||||
|
||||
// NewWrapper create a struct wrapper
|
||||
func NewWrapper(src any) *Wrapper {
|
||||
return WrapValue(reflect.ValueOf(src))
|
||||
}
|
||||
|
||||
// WrapValue create a struct wrapper
|
||||
func WrapValue(rv reflect.Value) *Wrapper {
|
||||
rv = reflect.Indirect(rv)
|
||||
if rv.Kind() != reflect.Struct {
|
||||
panic("must be provider an struct value")
|
||||
}
|
||||
|
||||
return &Wrapper{rv: rv}
|
||||
}
|
||||
|
||||
// Get field value by name
|
||||
func (r *Wrapper) Get(name string) any {
|
||||
val, ok := r.Lookup(name)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return val
|
||||
}
|
||||
|
||||
// Lookup field value by name
|
||||
func (r *Wrapper) Lookup(name string) (val any, ok bool) {
|
||||
fv := r.rv.FieldByName(name)
|
||||
if !fv.IsValid() {
|
||||
return
|
||||
}
|
||||
|
||||
return fv.Interface(), true
|
||||
}
|
||||
Reference in New Issue
Block a user