// Code generated by mockery v1.0.0. DO NOT EDIT.

package mocks

import (
	context "context"

	mock "github.com/stretchr/testify/mock"
	digesttools "go.skia.org/infra/golden/go/digesttools"

	warmer "go.skia.org/infra/golden/go/warmer"
)

// DiffWarmer is an autogenerated mock type for the DiffWarmer type
type DiffWarmer struct {
	mock.Mock
}

// PrecomputeDiffs provides a mock function with given fields: ctx, d, diffFinder
func (_m *DiffWarmer) PrecomputeDiffs(ctx context.Context, d warmer.Data, diffFinder digesttools.ClosestDiffFinder) error {
	ret := _m.Called(ctx, d, diffFinder)

	var r0 error
	if rf, ok := ret.Get(0).(func(context.Context, warmer.Data, digesttools.ClosestDiffFinder) error); ok {
		r0 = rf(ctx, d, diffFinder)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}
