// Code generated by mockery v2.53.3. DO NOT EDIT.

package mocks

import (
	api "github.com/ChainSafe/gossamer/internal/primitives/api"
	core "github.com/ChainSafe/gossamer/internal/primitives/core"

	mock "github.com/stretchr/testify/mock"

	overlayedchanges "github.com/ChainSafe/gossamer/internal/primitives/state-machine/overlayedchanges"

	runtime "github.com/ChainSafe/gossamer/internal/primitives/runtime"

	statemachine "github.com/ChainSafe/gossamer/internal/primitives/state-machine"

	trie "github.com/ChainSafe/gossamer/internal/primitives/trie"
)

// ApiExt is an autogenerated mock type for the ApiExt type
type ApiExt[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	mock.Mock
}

type ApiExt_Expecter[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	mock *mock.Mock
}

func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) EXPECT() *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]{mock: &_m.Mock}
}

// APIVersion provides a mock function with given fields: atHash
func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) APIVersion(atHash H) (*uint32, error) {
	ret := _m.Called(atHash)

	if len(ret) == 0 {
		panic("no return value specified for APIVersion")
	}

	var r0 *uint32
	var r1 error
	if rf, ok := ret.Get(0).(func(H) (*uint32, error)); ok {
		return rf(atHash)
	}
	if rf, ok := ret.Get(0).(func(H) *uint32); ok {
		r0 = rf(atHash)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*uint32)
		}
	}

	if rf, ok := ret.Get(1).(func(H) error); ok {
		r1 = rf(atHash)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// ApiExt_APIVersion_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'APIVersion'
type ApiExt_APIVersion_Call[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	*mock.Call
}

// APIVersion is a helper method to define mock.On call
//   - atHash H
func (_e *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]) APIVersion(atHash interface{}) *ApiExt_APIVersion_Call[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_APIVersion_Call[N, E, H, Hasher, Backend, Result, Header]{Call: _e.mock.On("APIVersion", atHash)}
}

func (_c *ApiExt_APIVersion_Call[N, E, H, Hasher, Backend, Result, Header]) Run(run func(atHash H)) *ApiExt_APIVersion_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(H))
	})
	return _c
}

func (_c *ApiExt_APIVersion_Call[N, E, H, Hasher, Backend, Result, Header]) Return(_a0 *uint32, _a1 error) *ApiExt_APIVersion_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(_a0, _a1)
	return _c
}

func (_c *ApiExt_APIVersion_Call[N, E, H, Hasher, Backend, Result, Header]) RunAndReturn(run func(H) (*uint32, error)) *ApiExt_APIVersion_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(run)
	return _c
}

// ExecuteBlock provides a mock function with given fields: runtimeApiAtParam, block
func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) ExecuteBlock(runtimeApiAtParam H, block runtime.Block[H, N, E, Header]) error {
	ret := _m.Called(runtimeApiAtParam, block)

	if len(ret) == 0 {
		panic("no return value specified for ExecuteBlock")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(H, runtime.Block[H, N, E, Header]) error); ok {
		r0 = rf(runtimeApiAtParam, block)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// ApiExt_ExecuteBlock_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ExecuteBlock'
type ApiExt_ExecuteBlock_Call[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	*mock.Call
}

// ExecuteBlock is a helper method to define mock.On call
//   - runtimeApiAtParam H
//   - block runtime.Block[H,N,E,Header]
func (_e *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]) ExecuteBlock(runtimeApiAtParam interface{}, block interface{}) *ApiExt_ExecuteBlock_Call[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_ExecuteBlock_Call[N, E, H, Hasher, Backend, Result, Header]{Call: _e.mock.On("ExecuteBlock", runtimeApiAtParam, block)}
}

func (_c *ApiExt_ExecuteBlock_Call[N, E, H, Hasher, Backend, Result, Header]) Run(run func(runtimeApiAtParam H, block runtime.Block[H, N, E, Header])) *ApiExt_ExecuteBlock_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(H), args[1].(runtime.Block[H, N, E, Header]))
	})
	return _c
}

func (_c *ApiExt_ExecuteBlock_Call[N, E, H, Hasher, Backend, Result, Header]) Return(_a0 error) *ApiExt_ExecuteBlock_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(_a0)
	return _c
}

func (_c *ApiExt_ExecuteBlock_Call[N, E, H, Hasher, Backend, Result, Header]) RunAndReturn(run func(H, runtime.Block[H, N, E, Header]) error) *ApiExt_ExecuteBlock_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(run)
	return _c
}

// ExecuteInTransaction provides a mock function with given fields: call
func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) ExecuteInTransaction(call func(api.ApiExt[N, E, H, Hasher, Backend, Result, Header]) runtime.TransactionOutcome[Result]) Result {
	ret := _m.Called(call)

	if len(ret) == 0 {
		panic("no return value specified for ExecuteInTransaction")
	}

	var r0 Result
	if rf, ok := ret.Get(0).(func(func(api.ApiExt[N, E, H, Hasher, Backend, Result, Header]) runtime.TransactionOutcome[Result]) Result); ok {
		r0 = rf(call)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(Result)
		}
	}

	return r0
}

// ApiExt_ExecuteInTransaction_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ExecuteInTransaction'
type ApiExt_ExecuteInTransaction_Call[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	*mock.Call
}

// ExecuteInTransaction is a helper method to define mock.On call
//   - call func(api.ApiExt[N,E,H,Hasher,Backend,Result,Header]) runtime.TransactionOutcome[Result]
func (_e *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]) ExecuteInTransaction(call interface{}) *ApiExt_ExecuteInTransaction_Call[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_ExecuteInTransaction_Call[N, E, H, Hasher, Backend, Result, Header]{Call: _e.mock.On("ExecuteInTransaction", call)}
}

func (_c *ApiExt_ExecuteInTransaction_Call[N, E, H, Hasher, Backend, Result, Header]) Run(run func(call func(api.ApiExt[N, E, H, Hasher, Backend, Result, Header]) runtime.TransactionOutcome[Result])) *ApiExt_ExecuteInTransaction_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(func(api.ApiExt[N, E, H, Hasher, Backend, Result, Header]) runtime.TransactionOutcome[Result]))
	})
	return _c
}

func (_c *ApiExt_ExecuteInTransaction_Call[N, E, H, Hasher, Backend, Result, Header]) Return(_a0 Result) *ApiExt_ExecuteInTransaction_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(_a0)
	return _c
}

func (_c *ApiExt_ExecuteInTransaction_Call[N, E, H, Hasher, Backend, Result, Header]) RunAndReturn(run func(func(api.ApiExt[N, E, H, Hasher, Backend, Result, Header]) runtime.TransactionOutcome[Result]) Result) *ApiExt_ExecuteInTransaction_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(run)
	return _c
}

// ExtractProof provides a mock function with no fields
func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) ExtractProof() *trie.StorageProof {
	ret := _m.Called()

	if len(ret) == 0 {
		panic("no return value specified for ExtractProof")
	}

	var r0 *trie.StorageProof
	if rf, ok := ret.Get(0).(func() *trie.StorageProof); ok {
		r0 = rf()
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*trie.StorageProof)
		}
	}

	return r0
}

// ApiExt_ExtractProof_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ExtractProof'
type ApiExt_ExtractProof_Call[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	*mock.Call
}

// ExtractProof is a helper method to define mock.On call
func (_e *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]) ExtractProof() *ApiExt_ExtractProof_Call[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_ExtractProof_Call[N, E, H, Hasher, Backend, Result, Header]{Call: _e.mock.On("ExtractProof")}
}

func (_c *ApiExt_ExtractProof_Call[N, E, H, Hasher, Backend, Result, Header]) Run(run func()) *ApiExt_ExtractProof_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Run(func(args mock.Arguments) {
		run()
	})
	return _c
}

func (_c *ApiExt_ExtractProof_Call[N, E, H, Hasher, Backend, Result, Header]) Return(_a0 *trie.StorageProof) *ApiExt_ExtractProof_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(_a0)
	return _c
}

func (_c *ApiExt_ExtractProof_Call[N, E, H, Hasher, Backend, Result, Header]) RunAndReturn(run func() *trie.StorageProof) *ApiExt_ExtractProof_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(run)
	return _c
}

// HasAPI provides a mock function with given fields: atHash
func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) HasAPI(atHash H) (bool, error) {
	ret := _m.Called(atHash)

	if len(ret) == 0 {
		panic("no return value specified for HasAPI")
	}

	var r0 bool
	var r1 error
	if rf, ok := ret.Get(0).(func(H) (bool, error)); ok {
		return rf(atHash)
	}
	if rf, ok := ret.Get(0).(func(H) bool); ok {
		r0 = rf(atHash)
	} else {
		r0 = ret.Get(0).(bool)
	}

	if rf, ok := ret.Get(1).(func(H) error); ok {
		r1 = rf(atHash)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// ApiExt_HasAPI_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'HasAPI'
type ApiExt_HasAPI_Call[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	*mock.Call
}

// HasAPI is a helper method to define mock.On call
//   - atHash H
func (_e *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]) HasAPI(atHash interface{}) *ApiExt_HasAPI_Call[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_HasAPI_Call[N, E, H, Hasher, Backend, Result, Header]{Call: _e.mock.On("HasAPI", atHash)}
}

func (_c *ApiExt_HasAPI_Call[N, E, H, Hasher, Backend, Result, Header]) Run(run func(atHash H)) *ApiExt_HasAPI_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(H))
	})
	return _c
}

func (_c *ApiExt_HasAPI_Call[N, E, H, Hasher, Backend, Result, Header]) Return(_a0 bool, _a1 error) *ApiExt_HasAPI_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(_a0, _a1)
	return _c
}

func (_c *ApiExt_HasAPI_Call[N, E, H, Hasher, Backend, Result, Header]) RunAndReturn(run func(H) (bool, error)) *ApiExt_HasAPI_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(run)
	return _c
}

// HasAPIWith provides a mock function with given fields: atHash, pred
func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) HasAPIWith(atHash H, pred func(uint32) bool) (bool, error) {
	ret := _m.Called(atHash, pred)

	if len(ret) == 0 {
		panic("no return value specified for HasAPIWith")
	}

	var r0 bool
	var r1 error
	if rf, ok := ret.Get(0).(func(H, func(uint32) bool) (bool, error)); ok {
		return rf(atHash, pred)
	}
	if rf, ok := ret.Get(0).(func(H, func(uint32) bool) bool); ok {
		r0 = rf(atHash, pred)
	} else {
		r0 = ret.Get(0).(bool)
	}

	if rf, ok := ret.Get(1).(func(H, func(uint32) bool) error); ok {
		r1 = rf(atHash, pred)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// ApiExt_HasAPIWith_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'HasAPIWith'
type ApiExt_HasAPIWith_Call[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	*mock.Call
}

// HasAPIWith is a helper method to define mock.On call
//   - atHash H
//   - pred func(uint32) bool
func (_e *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]) HasAPIWith(atHash interface{}, pred interface{}) *ApiExt_HasAPIWith_Call[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_HasAPIWith_Call[N, E, H, Hasher, Backend, Result, Header]{Call: _e.mock.On("HasAPIWith", atHash, pred)}
}

func (_c *ApiExt_HasAPIWith_Call[N, E, H, Hasher, Backend, Result, Header]) Run(run func(atHash H, pred func(uint32) bool)) *ApiExt_HasAPIWith_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(H), args[1].(func(uint32) bool))
	})
	return _c
}

func (_c *ApiExt_HasAPIWith_Call[N, E, H, Hasher, Backend, Result, Header]) Return(_a0 bool, _a1 error) *ApiExt_HasAPIWith_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(_a0, _a1)
	return _c
}

func (_c *ApiExt_HasAPIWith_Call[N, E, H, Hasher, Backend, Result, Header]) RunAndReturn(run func(H, func(uint32) bool) (bool, error)) *ApiExt_HasAPIWith_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(run)
	return _c
}

// IntoStorageChanges provides a mock function with given fields: backend, parentHash
func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) IntoStorageChanges(backend Backend, parentHash H) (overlayedchanges.StorageChanges[H, Hasher], error) {
	ret := _m.Called(backend, parentHash)

	if len(ret) == 0 {
		panic("no return value specified for IntoStorageChanges")
	}

	var r0 overlayedchanges.StorageChanges[H, Hasher]
	var r1 error
	if rf, ok := ret.Get(0).(func(Backend, H) (overlayedchanges.StorageChanges[H, Hasher], error)); ok {
		return rf(backend, parentHash)
	}
	if rf, ok := ret.Get(0).(func(Backend, H) overlayedchanges.StorageChanges[H, Hasher]); ok {
		r0 = rf(backend, parentHash)
	} else {
		r0 = ret.Get(0).(overlayedchanges.StorageChanges[H, Hasher])
	}

	if rf, ok := ret.Get(1).(func(Backend, H) error); ok {
		r1 = rf(backend, parentHash)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// ApiExt_IntoStorageChanges_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'IntoStorageChanges'
type ApiExt_IntoStorageChanges_Call[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	*mock.Call
}

// IntoStorageChanges is a helper method to define mock.On call
//   - backend Backend
//   - parentHash H
func (_e *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]) IntoStorageChanges(backend interface{}, parentHash interface{}) *ApiExt_IntoStorageChanges_Call[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_IntoStorageChanges_Call[N, E, H, Hasher, Backend, Result, Header]{Call: _e.mock.On("IntoStorageChanges", backend, parentHash)}
}

func (_c *ApiExt_IntoStorageChanges_Call[N, E, H, Hasher, Backend, Result, Header]) Run(run func(backend Backend, parentHash H)) *ApiExt_IntoStorageChanges_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(Backend), args[1].(H))
	})
	return _c
}

func (_c *ApiExt_IntoStorageChanges_Call[N, E, H, Hasher, Backend, Result, Header]) Return(_a0 overlayedchanges.StorageChanges[H, Hasher], _a1 error) *ApiExt_IntoStorageChanges_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(_a0, _a1)
	return _c
}

func (_c *ApiExt_IntoStorageChanges_Call[N, E, H, Hasher, Backend, Result, Header]) RunAndReturn(run func(Backend, H) (overlayedchanges.StorageChanges[H, Hasher], error)) *ApiExt_IntoStorageChanges_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(run)
	return _c
}

// ProofRecorder provides a mock function with no fields
func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) ProofRecorder() *api.ProofRecorder[H] {
	ret := _m.Called()

	if len(ret) == 0 {
		panic("no return value specified for ProofRecorder")
	}

	var r0 *api.ProofRecorder[H]
	if rf, ok := ret.Get(0).(func() *api.ProofRecorder[H]); ok {
		r0 = rf()
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*api.ProofRecorder[H])
		}
	}

	return r0
}

// ApiExt_ProofRecorder_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ProofRecorder'
type ApiExt_ProofRecorder_Call[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	*mock.Call
}

// ProofRecorder is a helper method to define mock.On call
func (_e *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]) ProofRecorder() *ApiExt_ProofRecorder_Call[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_ProofRecorder_Call[N, E, H, Hasher, Backend, Result, Header]{Call: _e.mock.On("ProofRecorder")}
}

func (_c *ApiExt_ProofRecorder_Call[N, E, H, Hasher, Backend, Result, Header]) Run(run func()) *ApiExt_ProofRecorder_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Run(func(args mock.Arguments) {
		run()
	})
	return _c
}

func (_c *ApiExt_ProofRecorder_Call[N, E, H, Hasher, Backend, Result, Header]) Return(_a0 *api.ProofRecorder[H]) *ApiExt_ProofRecorder_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(_a0)
	return _c
}

func (_c *ApiExt_ProofRecorder_Call[N, E, H, Hasher, Backend, Result, Header]) RunAndReturn(run func() *api.ProofRecorder[H]) *ApiExt_ProofRecorder_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return(run)
	return _c
}

// RecordProof provides a mock function with no fields
func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) RecordProof() {
	_m.Called()
}

// ApiExt_RecordProof_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RecordProof'
type ApiExt_RecordProof_Call[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	*mock.Call
}

// RecordProof is a helper method to define mock.On call
func (_e *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]) RecordProof() *ApiExt_RecordProof_Call[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_RecordProof_Call[N, E, H, Hasher, Backend, Result, Header]{Call: _e.mock.On("RecordProof")}
}

func (_c *ApiExt_RecordProof_Call[N, E, H, Hasher, Backend, Result, Header]) Run(run func()) *ApiExt_RecordProof_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Run(func(args mock.Arguments) {
		run()
	})
	return _c
}

func (_c *ApiExt_RecordProof_Call[N, E, H, Hasher, Backend, Result, Header]) Return() *ApiExt_RecordProof_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return()
	return _c
}

func (_c *ApiExt_RecordProof_Call[N, E, H, Hasher, Backend, Result, Header]) RunAndReturn(run func()) *ApiExt_RecordProof_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Run(run)
	return _c
}

// RegisterExtension provides a mock function with given fields: extension
func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) RegisterExtension(extension interface{}) {
	_m.Called(extension)
}

// ApiExt_RegisterExtension_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterExtension'
type ApiExt_RegisterExtension_Call[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	*mock.Call
}

// RegisterExtension is a helper method to define mock.On call
//   - extension interface{}
func (_e *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]) RegisterExtension(extension interface{}) *ApiExt_RegisterExtension_Call[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_RegisterExtension_Call[N, E, H, Hasher, Backend, Result, Header]{Call: _e.mock.On("RegisterExtension", extension)}
}

func (_c *ApiExt_RegisterExtension_Call[N, E, H, Hasher, Backend, Result, Header]) Run(run func(extension interface{})) *ApiExt_RegisterExtension_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(interface{}))
	})
	return _c
}

func (_c *ApiExt_RegisterExtension_Call[N, E, H, Hasher, Backend, Result, Header]) Return() *ApiExt_RegisterExtension_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return()
	return _c
}

func (_c *ApiExt_RegisterExtension_Call[N, E, H, Hasher, Backend, Result, Header]) RunAndReturn(run func(interface{})) *ApiExt_RegisterExtension_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Run(run)
	return _c
}

// SetCallContext provides a mock function with given fields: callContext
func (_m *ApiExt[N, E, H, Hasher, Backend, Result, Header]) SetCallContext(callContext core.CallContext) {
	_m.Called(callContext)
}

// ApiExt_SetCallContext_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetCallContext'
type ApiExt_SetCallContext_Call[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]] struct {
	*mock.Call
}

// SetCallContext is a helper method to define mock.On call
//   - callContext core.CallContext
func (_e *ApiExt_Expecter[N, E, H, Hasher, Backend, Result, Header]) SetCallContext(callContext interface{}) *ApiExt_SetCallContext_Call[N, E, H, Hasher, Backend, Result, Header] {
	return &ApiExt_SetCallContext_Call[N, E, H, Hasher, Backend, Result, Header]{Call: _e.mock.On("SetCallContext", callContext)}
}

func (_c *ApiExt_SetCallContext_Call[N, E, H, Hasher, Backend, Result, Header]) Run(run func(callContext core.CallContext)) *ApiExt_SetCallContext_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(core.CallContext))
	})
	return _c
}

func (_c *ApiExt_SetCallContext_Call[N, E, H, Hasher, Backend, Result, Header]) Return() *ApiExt_SetCallContext_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Call.Return()
	return _c
}

func (_c *ApiExt_SetCallContext_Call[N, E, H, Hasher, Backend, Result, Header]) RunAndReturn(run func(core.CallContext)) *ApiExt_SetCallContext_Call[N, E, H, Hasher, Backend, Result, Header] {
	_c.Run(run)
	return _c
}

// NewApiExt creates a new instance of ApiExt. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewApiExt[N runtime.Number, E runtime.Extrinsic, H runtime.Hash, Hasher runtime.Hasher[H], Backend statemachine.Backend[H, Hasher], Result interface{}, Header runtime.Header[N, H]](t interface {
	mock.TestingT
	Cleanup(func())
}) *ApiExt[N, E, H, Hasher, Backend, Result, Header] {
	mock := &ApiExt[N, E, H, Hasher, Backend, Result, Header]{}
	mock.Mock.Test(t)

	t.Cleanup(func() { mock.AssertExpectations(t) })

	return mock
}
