Documentation
¶
Overview ¶
Example ¶
package main import ( "fmt" "strings" "time" "github.com/vkd/gowalker" "github.com/vkd/gowalker/config" "golang.org/x/text/cases" "golang.org/x/text/language" ) type titleName string func (c *titleName) SetString(s string) error { *c = titleName(cases.Title(language.Und).String(s) + "!") return nil } func main() { var cfg struct { Name titleName Timeout time.Duration `default:"3s"` DB struct { Username string `required:""` Password string `required:""` } Metrics struct { Addr string `env:"METRICS_URL"` } } // osLookupEnv := os.LookupEnv osLookupEnv := func(key string) (string, bool) { v, ok := map[string]string{ "MY_ORG_DB_USERNAME": "postgres", "MY_ORG_METRICS_URL": "localhost:5678", }[key] return v, ok } // osArgs := os.Args osArgs := []string{"gowalker", "--timeout=5s", "--db-password", "example", "--name=gowalker"} err := config.Walk(&cfg, nil, gowalker.Flags(gowalker.FieldKey("flag", gowalker.Fullname("-", strings.ToLower)), osArgs), gowalker.Envs(gowalker.Prefix("MY_ORG_", gowalker.FieldKey("env", gowalker.Fullname("_", strings.ToUpper))), osLookupEnv), gowalker.Tag("default"), gowalker.Required("required"), ) fmt.Printf("%v, %v", cfg, err) }
Output: {Gowalker! 5s {postgres example} {localhost:5678}}, <nil>
Index ¶
- Variables
- func IsGoWalkerField(value reflect.Value) bool
- func KeyUpdatedFields(fs Fields) string
- func Walk(value interface{}, fs Fields, w Walker, cs ...Option) error
- type DefaultTag
- type Env
- type FieldKeyer
- type FieldKeyerFunc
- type Fields
- type Flag
- type GoWalkerFielder
- type LookupFunc
- type Maybe
- type Namer
- type NamerFunc
- type Option
- type Required
- type Tag
- type UpdatedFields
- type Walker
- type WalkerFunc
- type WalkersOR
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var DashToLoverNamer = Fullname("-", strings.ToLower)
DashToLoverNamer - concat a lowercase parent's name with a lowercase child's one with dash.
View Source
var DefaultNamer = Fullname("", nil)
View Source
var EnvNamer = UpperNamer
EnvNamer - STRUCT_FIELD naming.
View Source
var ErrPrintHelp = fmt.Errorf("print help")
View Source
var ErrRequiredField = errors.New("field is required")
View Source
var ErrUnsupportedValue = errors.New("unsupported type for value: allowed only ptr")
ErrUnsupportedValue is raised if value is passed not as a pointer.
View Source
var FlagNamer = DashToLoverNamer
FlagNamer - struct-field naming.
View Source
var StructFieldNamer = Fullname(".", nil)
StructFieldNamer - concat a parent's name with a child's one with dot.
View Source
var UpperNamer = Fullname("_", strings.ToUpper)
UpperNamer - concat a uppercase parent's name with a uppercase child's one with underscore.
Functions ¶
func IsGoWalkerField ¶ added in v0.1.2
func KeyUpdatedFields ¶ added in v0.0.11
func Walk ¶
Walk - walk struct by all public fields.
Should be passed as pointer: type myStruct struct var s myStruct gowalker.Walk(&s, ...)
Example (CollectAllPublicFields) ¶
package main import ( "fmt" "reflect" "time" "github.com/vkd/gowalker" ) type visitedFields []string func (f *visitedFields) Step(value reflect.Value, field reflect.StructField, fs gowalker.Fields) (set bool, err error) { key := gowalker.DashToLoverNamer.Key(fs.Names()) *f = append(*f, key) return false, nil } func main() { var config struct { Name string Port int DB struct { URL string Port int } StartedAt time.Time } var fs visitedFields err := gowalker.Walk(&config, gowalker.MakeFields(2), &fs) fmt.Printf("fields: %v, %v", fs, err) }
Output: fields: [name port db-url db-port startedat], <nil>
Example (FromMapOfStrings) ¶
package main import ( "fmt" "reflect" "github.com/vkd/gowalker" "github.com/vkd/gowalker/setter" ) func main() { var q struct { Name string `uri:"name"` Age int `uri:"age"` Friends []string `uri:"friends"` Coins []int `uri:"coins"` Keys []int } uri := map[string][]string{ "name": {"mike"}, "friends": {"igor", "alisa"}, } fk := gowalker.FieldKey("uri", gowalker.DefaultNamer) w := gowalker.WalkerFunc(func(value reflect.Value, field reflect.StructField, fs gowalker.Fields) (stop bool, _ error) { key := fk.FieldKey(field, fs) v, ok := uri[key] if !ok { return false, nil } return true, setter.SetSliceStrings(value, field, v) }) err := gowalker.Walk(&q, gowalker.MakeFields(1), w) fmt.Printf("%+v, %v", q, err) }
Output: {Name:mike Age:0 Friends:[igor alisa] Coins:[] Keys:[]}, <nil>
Types ¶
type DefaultTag ¶ added in v0.1.2
type DefaultTag Tag
func (DefaultTag) Doc ¶ added in v0.1.2
func (t DefaultTag) Doc(field reflect.StructField, fs Fields) string
func (DefaultTag) Name ¶ added in v0.1.2
func (t DefaultTag) Name() string
func (DefaultTag) Step ¶ added in v0.1.2
func (t DefaultTag) Step(value reflect.Value, field reflect.StructField, fs Fields) (bool, error)
type Env ¶ added in v0.0.11
type Env struct { FieldKeyer LookupFunc }
func Envs ¶ added in v0.0.9
func Envs(fk FieldKeyer, osLookupEnv LookupFunc) *Env
type FieldKeyer ¶ added in v0.0.5
type FieldKeyer interface {
FieldKey(reflect.StructField, Fields) string
}
func FieldKey ¶ added in v0.0.6
func FieldKey(t Tag, namer Namer) FieldKeyer
func NestedFieldKey ¶ added in v0.1.1
func NestedFieldKey(t, fkey Tag, namer Namer) FieldKeyer
func Prefix ¶ added in v0.0.14
func Prefix(p string, fk FieldKeyer) FieldKeyer
type FieldKeyerFunc ¶ added in v0.1.1
type FieldKeyerFunc func(reflect.StructField, Fields) string
func (FieldKeyerFunc) FieldKey ¶ added in v0.1.1
func (f FieldKeyerFunc) FieldKey(field reflect.StructField, fs Fields) string
type Flag ¶ added in v0.0.5
type Flag struct { FieldKeyer OsArgs []string // contains filtered or unexported fields }
func Flags ¶ added in v0.0.9
func Flags(fk FieldKeyer, osArgs []string) *Flag
type GoWalkerFielder ¶ added in v0.1.2
type GoWalkerFielder interface {
GoWalkerField()
}
type LookupFunc ¶ added in v0.0.11
type Maybe ¶ added in v0.1.2
func (Maybe[T]) GoWalkerField ¶ added in v0.1.2
func (Maybe[T]) GoWalkerField()
func (Maybe[T]) GoWalkerMaybe ¶ added in v0.1.2
func (Maybe[T]) GoWalkerMaybe()
type Option ¶ added in v0.0.17
type Option interface {
// contains filtered or unexported methods
}
func StepOnStructFields ¶ added in v0.0.17
func StepOnStructFields() Option
type Required ¶ added in v0.0.6
type Required Tag
type UpdatedFields ¶ added in v0.0.6
type UpdatedFields map[string]struct{}
func FlagWalk ¶ added in v0.0.6
func FlagWalk(ptr interface{}, fs Fields, kb FieldKeyer, osArgs []string) (UpdatedFields, error)
func (UpdatedFields) Has ¶ added in v0.0.11
func (u UpdatedFields) Has(fs Fields) bool
type WalkerFunc ¶
func (WalkerFunc) Step ¶
func (f WalkerFunc) Step(value reflect.Value, field reflect.StructField, fs Fields) (bool, error)
Click to show internal directories.
Click to hide internal directories.