// Code generated by moq; DO NOT EDIT.
// cirello.io/moq

package dynamolock

import (
	"context"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb"
	"sync"
)

// Ensure, that mockDynamoDBClient does implement DynamoDBClient.
// If this is not the case, regenerate this file with moq.
var _ DynamoDBClient = &mockDynamoDBClient{}

// mockDynamoDBClient is a mock implementation of DynamoDBClient.
//
//	func TestSomethingThatUsesDynamoDBClient(t *testing.T) {
//
//		// make and configure a mocked DynamoDBClient
//		mockedDynamoDBClient := &mockDynamoDBClient{
//			CreateTableFunc: func(ctx context.Context, params *dynamodb.CreateTableInput, optFns ...func(*dynamodb.Options)) (*dynamodb.CreateTableOutput, error) {
//				panic("mock out the CreateTable method")
//			},
//			DeleteItemFunc: func(ctx context.Context, params *dynamodb.DeleteItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.DeleteItemOutput, error) {
//				panic("mock out the DeleteItem method")
//			},
//			GetItemFunc: func(ctx context.Context, params *dynamodb.GetItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.GetItemOutput, error) {
//				panic("mock out the GetItem method")
//			},
//			PutItemFunc: func(ctx context.Context, params *dynamodb.PutItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.PutItemOutput, error) {
//				panic("mock out the PutItem method")
//			},
//			UpdateItemFunc: func(ctx context.Context, params *dynamodb.UpdateItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.UpdateItemOutput, error) {
//				panic("mock out the UpdateItem method")
//			},
//		}
//
//		// use mockedDynamoDBClient in code that requires DynamoDBClient
//		// and then make assertions.
//
//	}
type mockDynamoDBClient struct {
	// CreateTableFunc mocks the CreateTable method.
	CreateTableFunc func(ctx context.Context, params *dynamodb.CreateTableInput, optFns ...func(*dynamodb.Options)) (*dynamodb.CreateTableOutput, error)

	// DeleteItemFunc mocks the DeleteItem method.
	DeleteItemFunc func(ctx context.Context, params *dynamodb.DeleteItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.DeleteItemOutput, error)

	// GetItemFunc mocks the GetItem method.
	GetItemFunc func(ctx context.Context, params *dynamodb.GetItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.GetItemOutput, error)

	// PutItemFunc mocks the PutItem method.
	PutItemFunc func(ctx context.Context, params *dynamodb.PutItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.PutItemOutput, error)

	// UpdateItemFunc mocks the UpdateItem method.
	UpdateItemFunc func(ctx context.Context, params *dynamodb.UpdateItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.UpdateItemOutput, error)

	// calls tracks calls to the methods.
	calls struct {
		// CreateTable holds details about calls to the CreateTable method.
		CreateTable []struct {
			// Ctx is the ctx argument value.
			Ctx context.Context
			// Params is the params argument value.
			Params *dynamodb.CreateTableInput
			// OptFns is the optFns argument value.
			OptFns []func(*dynamodb.Options)
		}
		// DeleteItem holds details about calls to the DeleteItem method.
		DeleteItem []struct {
			// Ctx is the ctx argument value.
			Ctx context.Context
			// Params is the params argument value.
			Params *dynamodb.DeleteItemInput
			// OptFns is the optFns argument value.
			OptFns []func(*dynamodb.Options)
		}
		// GetItem holds details about calls to the GetItem method.
		GetItem []struct {
			// Ctx is the ctx argument value.
			Ctx context.Context
			// Params is the params argument value.
			Params *dynamodb.GetItemInput
			// OptFns is the optFns argument value.
			OptFns []func(*dynamodb.Options)
		}
		// PutItem holds details about calls to the PutItem method.
		PutItem []struct {
			// Ctx is the ctx argument value.
			Ctx context.Context
			// Params is the params argument value.
			Params *dynamodb.PutItemInput
			// OptFns is the optFns argument value.
			OptFns []func(*dynamodb.Options)
		}
		// UpdateItem holds details about calls to the UpdateItem method.
		UpdateItem []struct {
			// Ctx is the ctx argument value.
			Ctx context.Context
			// Params is the params argument value.
			Params *dynamodb.UpdateItemInput
			// OptFns is the optFns argument value.
			OptFns []func(*dynamodb.Options)
		}
	}
	lockCreateTable sync.RWMutex
	lockDeleteItem  sync.RWMutex
	lockGetItem     sync.RWMutex
	lockPutItem     sync.RWMutex
	lockUpdateItem  sync.RWMutex
}

// CreateTable calls CreateTableFunc.
func (mock *mockDynamoDBClient) CreateTable(ctx context.Context, params *dynamodb.CreateTableInput, optFns ...func(*dynamodb.Options)) (*dynamodb.CreateTableOutput, error) {
	if mock.CreateTableFunc == nil {
		panic("mockDynamoDBClient.CreateTableFunc: method is nil but DynamoDBClient.CreateTable was just called")
	}
	callInfo := struct {
		Ctx    context.Context
		Params *dynamodb.CreateTableInput
		OptFns []func(*dynamodb.Options)
	}{
		Ctx:    ctx,
		Params: params,
		OptFns: optFns,
	}
	mock.lockCreateTable.Lock()
	mock.calls.CreateTable = append(mock.calls.CreateTable, callInfo)
	mock.lockCreateTable.Unlock()
	return mock.CreateTableFunc(ctx, params, optFns...)
}

// CreateTableCalls gets all the calls that were made to CreateTable.
// Check the length with:
//
//	len(mockedDynamoDBClient.CreateTableCalls())
func (mock *mockDynamoDBClient) CreateTableCalls() []struct {
	Ctx    context.Context
	Params *dynamodb.CreateTableInput
	OptFns []func(*dynamodb.Options)
} {
	var calls []struct {
		Ctx    context.Context
		Params *dynamodb.CreateTableInput
		OptFns []func(*dynamodb.Options)
	}
	mock.lockCreateTable.RLock()
	calls = mock.calls.CreateTable
	mock.lockCreateTable.RUnlock()
	return calls
}

// DeleteItem calls DeleteItemFunc.
func (mock *mockDynamoDBClient) DeleteItem(ctx context.Context, params *dynamodb.DeleteItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.DeleteItemOutput, error) {
	if mock.DeleteItemFunc == nil {
		panic("mockDynamoDBClient.DeleteItemFunc: method is nil but DynamoDBClient.DeleteItem was just called")
	}
	callInfo := struct {
		Ctx    context.Context
		Params *dynamodb.DeleteItemInput
		OptFns []func(*dynamodb.Options)
	}{
		Ctx:    ctx,
		Params: params,
		OptFns: optFns,
	}
	mock.lockDeleteItem.Lock()
	mock.calls.DeleteItem = append(mock.calls.DeleteItem, callInfo)
	mock.lockDeleteItem.Unlock()
	return mock.DeleteItemFunc(ctx, params, optFns...)
}

// DeleteItemCalls gets all the calls that were made to DeleteItem.
// Check the length with:
//
//	len(mockedDynamoDBClient.DeleteItemCalls())
func (mock *mockDynamoDBClient) DeleteItemCalls() []struct {
	Ctx    context.Context
	Params *dynamodb.DeleteItemInput
	OptFns []func(*dynamodb.Options)
} {
	var calls []struct {
		Ctx    context.Context
		Params *dynamodb.DeleteItemInput
		OptFns []func(*dynamodb.Options)
	}
	mock.lockDeleteItem.RLock()
	calls = mock.calls.DeleteItem
	mock.lockDeleteItem.RUnlock()
	return calls
}

// GetItem calls GetItemFunc.
func (mock *mockDynamoDBClient) GetItem(ctx context.Context, params *dynamodb.GetItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.GetItemOutput, error) {
	if mock.GetItemFunc == nil {
		panic("mockDynamoDBClient.GetItemFunc: method is nil but DynamoDBClient.GetItem was just called")
	}
	callInfo := struct {
		Ctx    context.Context
		Params *dynamodb.GetItemInput
		OptFns []func(*dynamodb.Options)
	}{
		Ctx:    ctx,
		Params: params,
		OptFns: optFns,
	}
	mock.lockGetItem.Lock()
	mock.calls.GetItem = append(mock.calls.GetItem, callInfo)
	mock.lockGetItem.Unlock()
	return mock.GetItemFunc(ctx, params, optFns...)
}

// GetItemCalls gets all the calls that were made to GetItem.
// Check the length with:
//
//	len(mockedDynamoDBClient.GetItemCalls())
func (mock *mockDynamoDBClient) GetItemCalls() []struct {
	Ctx    context.Context
	Params *dynamodb.GetItemInput
	OptFns []func(*dynamodb.Options)
} {
	var calls []struct {
		Ctx    context.Context
		Params *dynamodb.GetItemInput
		OptFns []func(*dynamodb.Options)
	}
	mock.lockGetItem.RLock()
	calls = mock.calls.GetItem
	mock.lockGetItem.RUnlock()
	return calls
}

// PutItem calls PutItemFunc.
func (mock *mockDynamoDBClient) PutItem(ctx context.Context, params *dynamodb.PutItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.PutItemOutput, error) {
	if mock.PutItemFunc == nil {
		panic("mockDynamoDBClient.PutItemFunc: method is nil but DynamoDBClient.PutItem was just called")
	}
	callInfo := struct {
		Ctx    context.Context
		Params *dynamodb.PutItemInput
		OptFns []func(*dynamodb.Options)
	}{
		Ctx:    ctx,
		Params: params,
		OptFns: optFns,
	}
	mock.lockPutItem.Lock()
	mock.calls.PutItem = append(mock.calls.PutItem, callInfo)
	mock.lockPutItem.Unlock()
	return mock.PutItemFunc(ctx, params, optFns...)
}

// PutItemCalls gets all the calls that were made to PutItem.
// Check the length with:
//
//	len(mockedDynamoDBClient.PutItemCalls())
func (mock *mockDynamoDBClient) PutItemCalls() []struct {
	Ctx    context.Context
	Params *dynamodb.PutItemInput
	OptFns []func(*dynamodb.Options)
} {
	var calls []struct {
		Ctx    context.Context
		Params *dynamodb.PutItemInput
		OptFns []func(*dynamodb.Options)
	}
	mock.lockPutItem.RLock()
	calls = mock.calls.PutItem
	mock.lockPutItem.RUnlock()
	return calls
}

// UpdateItem calls UpdateItemFunc.
func (mock *mockDynamoDBClient) UpdateItem(ctx context.Context, params *dynamodb.UpdateItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.UpdateItemOutput, error) {
	if mock.UpdateItemFunc == nil {
		panic("mockDynamoDBClient.UpdateItemFunc: method is nil but DynamoDBClient.UpdateItem was just called")
	}
	callInfo := struct {
		Ctx    context.Context
		Params *dynamodb.UpdateItemInput
		OptFns []func(*dynamodb.Options)
	}{
		Ctx:    ctx,
		Params: params,
		OptFns: optFns,
	}
	mock.lockUpdateItem.Lock()
	mock.calls.UpdateItem = append(mock.calls.UpdateItem, callInfo)
	mock.lockUpdateItem.Unlock()
	return mock.UpdateItemFunc(ctx, params, optFns...)
}

// UpdateItemCalls gets all the calls that were made to UpdateItem.
// Check the length with:
//
//	len(mockedDynamoDBClient.UpdateItemCalls())
func (mock *mockDynamoDBClient) UpdateItemCalls() []struct {
	Ctx    context.Context
	Params *dynamodb.UpdateItemInput
	OptFns []func(*dynamodb.Options)
} {
	var calls []struct {
		Ctx    context.Context
		Params *dynamodb.UpdateItemInput
		OptFns []func(*dynamodb.Options)
	}
	mock.lockUpdateItem.RLock()
	calls = mock.calls.UpdateItem
	mock.lockUpdateItem.RUnlock()
	return calls
}
