package iter import ( "context" "fmt" "github.com/lestrrat-go/iter/mapiter" ) // 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 { //nolint:forcetypeassert 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, fmt.Errorf(`mapiter.AsMap failed: %w`, err) } return m, nil }