// Visit implements the Visitor interface on the items described in the Builder. // Note that some visitor sources are not traversable more than once, or may // return different results. If you wish to operate on the same set of resources // multiple times, use the Infos() method. func (r *Result) Visit(fn VisitorFunc) error { if r.err != nil { return r.err } err := r.visitor.Visit(fn) return utilerrors.FilterOut(err, r.ignoreErrors...) }
// Filter removes items from the ErrorList that match the provided fns. func (list ErrorList) Filter(fns ...utilerrors.Matcher) ErrorList { err := utilerrors.FilterOut(list.ToAggregate(), fns...) if err == nil { return nil } // FilterOut takes an Aggregate and returns an Aggregate return fromAggregate(err.(utilerrors.Aggregate)) }
// Infos returns an array of all of the resource infos retrieved via traversal. // Will attempt to traverse the entire set of visitors only once, and will return // a cached list on subsequent calls. func (r *Result) Infos() ([]*Info, error) { if r.err != nil { return nil, r.err } if r.info != nil { return r.info, nil } infos := []*Info{} err := r.visitor.Visit(func(info *Info, err error) error { if err != nil { return err } infos = append(infos, info) return nil }) err = utilerrors.FilterOut(err, r.ignoreErrors...) r.info, r.err = infos, err return infos, err }