func (m *MultiFetcher) ResetResponseVerifications() {
	log.Debugf("body.MultiFetcher.ResetResponseVerifications")
	for _, resmod := range m.fetchers {
		resmod.ResetResponseVerifications()
	}
}
ResetResponseVerifications clears all failed response verifications.
package body
import (
	"encoding/json"
	"net/http"
	"sync"
	"github.com/google/martian/v3"
	"github.com/google/martian/v3/log"
	"github.com/google/martian/v3/parse"
	"github.com/google/martian/v3/verify"
)
func init() {
	parse.Register("body.MultiFetcher", multiFetcherFromJSON)
}
type multiFetcherJSON struct {
	Scope     []parse.ModifierType `json:"scope"`
	Resources []json.RawMessage    `json:"resources"`
}
type ResourceFetcher interface {
	verify.ResponseVerifier
	FetchResource() (martian.ResponseModifier, error)
}
type MultiFetcher struct {
	fetchers []ResourceFetcher
}
func NewMultiFetcher(fetchers []ResourceFetcher) *MultiFetcher {
	return &MultiFetcher{fetchers: fetchers}
}
func (m *MultiFetcher) ModifyResponse(res *http.Response) error {
	log.Debugf("body.MultiFetcher.ModifyResponse: request: %s", res.Request.URL)
	resources := make(map[int]martian.ResponseModifier)
	resmu := sync.Mutex{}
	merrmu := sync.Mutex{}
	merr := martian.NewMultiError()
	wg := sync.WaitGroup{}
	for i, fetcher := range m.fetchers {
		wg.Add(1)
		go func(i int, fetcher ResourceFetcher) {
			defer wg.Done()
			resource, err := fetcher.FetchResource()
			if err != nil {
				merrmu.Lock()
				merr.Add(err)
				merrmu.Unlock()
			}
			resmu.Lock()
			resources[i] = resource
			resmu.Unlock()
		}(i, fetcher)
	}
	wg.Wait()
	merrmu.Lock()
	if !merr.Empty() {
		return merr
	}
	merrmu.Unlock()
	resmu.Lock()
	for i := 0; i < len(resources); i++ {
		err := resources[i].ModifyResponse(res)
		if err != nil {
			return err
		}
	}
	resmu.Unlock()
	return nil
}