package iter import ( "context" "github.com/lestrrat-go/iter/mapiter" "github.com/pkg/errors" ) // MapVisitor is a specialized visitor for our purposes. // Whereas mapiter.Visitor supports any type of key, this // visitor assumes the key is a string type MapVisitor interface { Visit(string, interface{}) error } type MapVisitorFunc func(string, interface{}) error func (fn MapVisitorFunc) Visit(s string, v interface{}) error { return fn(s, v) } func WalkMap(ctx context.Context, src mapiter.Source, visitor MapVisitor) error { return mapiter.Walk(ctx, src, mapiter.VisitorFunc(func(k, v interface{}) error { return visitor.Visit(k.(string), v) })) } func AsMap(ctx context.Context, src mapiter.Source) (map[string]interface{}, error) { var m map[string]interface{} if err := mapiter.AsMap(ctx, src, &m); err != nil { return nil, errors.Wrap(err, `mapiter.AsMap failed`) } return m, nil }