Merging issue 280 with master changes (#296)

This commit is contained in:
Jacob Hochstetler
2022-09-20 07:55:05 -05:00
committed by GitHub
parent 9c8b401de0
commit 0c6a9f3a3d
5 changed files with 293 additions and 5 deletions
+18 -1
View File
@@ -274,7 +274,8 @@ func (r *Registry) RegisterDefaults() *Registry {
RegisterName("path", pathMapper(r)).
RegisterName("existingfile", existingFileMapper(r)).
RegisterName("existingdir", existingDirMapper(r)).
RegisterName("counter", counterMapper())
RegisterName("counter", counterMapper()).
RegisterKind(reflect.Ptr, ptrMapper(r))
}
type boolMapper struct{}
@@ -669,6 +670,22 @@ func existingDirMapper(r *Registry) MapperFunc {
}
}
func ptrMapper(r *Registry) MapperFunc {
return func(ctx *DecodeContext, target reflect.Value) error {
elem := reflect.New(target.Type().Elem()).Elem()
nestedMapper := r.ForValue(elem)
if nestedMapper == nil {
return fmt.Errorf("cannot find mapper for %v", target.Type().Elem().String())
}
err := nestedMapper.Decode(ctx, elem)
if err != nil {
return err
}
target.Set(elem.Addr())
return nil
}
}
func counterMapper() MapperFunc {
return func(ctx *DecodeContext, target reflect.Value) error {
if ctx.Scan.Peek().Type == FlagValueToken {