// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.

// Package controltoweriface provides an interface to enable mocking the AWS Control Tower service client
// for testing your code.
//
// It is important to note that this interface will have breaking changes
// when the service model is updated and adds new API operations, paginators,
// and waiters.
package controltoweriface

import (
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/request"
	"github.com/aws/aws-sdk-go/service/controltower"
)

// ControlTowerAPI provides an interface to enable mocking the
// controltower.ControlTower service client's API operation,
// paginators, and waiters. This make unit testing your code that calls out
// to the SDK's service client's calls easier.
//
// The best way to use this interface is so the SDK's service client's calls
// can be stubbed out for unit testing your code with the SDK without needing
// to inject custom request handlers into the SDK's request pipeline.
//
//	// myFunc uses an SDK service client to make a request to
//	// AWS Control Tower.
//	func myFunc(svc controltoweriface.ControlTowerAPI) bool {
//	    // Make svc.DeleteLandingZone request
//	}
//
//	func main() {
//	    sess := session.New()
//	    svc := controltower.New(sess)
//
//	    myFunc(svc)
//	}
//
// In your _test.go file:
//
//	// Define a mock struct to be used in your unit tests of myFunc.
//	type mockControlTowerClient struct {
//	    controltoweriface.ControlTowerAPI
//	}
//	func (m *mockControlTowerClient) DeleteLandingZone(input *controltower.DeleteLandingZoneInput) (*controltower.DeleteLandingZoneOutput, error) {
//	    // mock response/functionality
//	}
//
//	func TestMyFunc(t *testing.T) {
//	    // Setup Test
//	    mockSvc := &mockControlTowerClient{}
//
//	    myfunc(mockSvc)
//
//	    // Verify myFunc's functionality
//	}
//
// It is important to note that this interface will have breaking changes
// when the service model is updated and adds new API operations, paginators,
// and waiters. Its suggested to use the pattern above for testing, or using
// tooling to generate mocks to satisfy the interfaces.
type ControlTowerAPI interface {
	DeleteLandingZone(*controltower.DeleteLandingZoneInput) (*controltower.DeleteLandingZoneOutput, error)
	DeleteLandingZoneWithContext(aws.Context, *controltower.DeleteLandingZoneInput, ...request.Option) (*controltower.DeleteLandingZoneOutput, error)
	DeleteLandingZoneRequest(*controltower.DeleteLandingZoneInput) (*request.Request, *controltower.DeleteLandingZoneOutput)

	DisableControl(*controltower.DisableControlInput) (*controltower.DisableControlOutput, error)
	DisableControlWithContext(aws.Context, *controltower.DisableControlInput, ...request.Option) (*controltower.DisableControlOutput, error)
	DisableControlRequest(*controltower.DisableControlInput) (*request.Request, *controltower.DisableControlOutput)

	EnableControl(*controltower.EnableControlInput) (*controltower.EnableControlOutput, error)
	EnableControlWithContext(aws.Context, *controltower.EnableControlInput, ...request.Option) (*controltower.EnableControlOutput, error)
	EnableControlRequest(*controltower.EnableControlInput) (*request.Request, *controltower.EnableControlOutput)

	GetControlOperation(*controltower.GetControlOperationInput) (*controltower.GetControlOperationOutput, error)
	GetControlOperationWithContext(aws.Context, *controltower.GetControlOperationInput, ...request.Option) (*controltower.GetControlOperationOutput, error)
	GetControlOperationRequest(*controltower.GetControlOperationInput) (*request.Request, *controltower.GetControlOperationOutput)

	GetEnabledControl(*controltower.GetEnabledControlInput) (*controltower.GetEnabledControlOutput, error)
	GetEnabledControlWithContext(aws.Context, *controltower.GetEnabledControlInput, ...request.Option) (*controltower.GetEnabledControlOutput, error)
	GetEnabledControlRequest(*controltower.GetEnabledControlInput) (*request.Request, *controltower.GetEnabledControlOutput)

	GetLandingZoneOperation(*controltower.GetLandingZoneOperationInput) (*controltower.GetLandingZoneOperationOutput, error)
	GetLandingZoneOperationWithContext(aws.Context, *controltower.GetLandingZoneOperationInput, ...request.Option) (*controltower.GetLandingZoneOperationOutput, error)
	GetLandingZoneOperationRequest(*controltower.GetLandingZoneOperationInput) (*request.Request, *controltower.GetLandingZoneOperationOutput)

	ListEnabledControls(*controltower.ListEnabledControlsInput) (*controltower.ListEnabledControlsOutput, error)
	ListEnabledControlsWithContext(aws.Context, *controltower.ListEnabledControlsInput, ...request.Option) (*controltower.ListEnabledControlsOutput, error)
	ListEnabledControlsRequest(*controltower.ListEnabledControlsInput) (*request.Request, *controltower.ListEnabledControlsOutput)

	ListEnabledControlsPages(*controltower.ListEnabledControlsInput, func(*controltower.ListEnabledControlsOutput, bool) bool) error
	ListEnabledControlsPagesWithContext(aws.Context, *controltower.ListEnabledControlsInput, func(*controltower.ListEnabledControlsOutput, bool) bool, ...request.Option) error

	ListLandingZones(*controltower.ListLandingZonesInput) (*controltower.ListLandingZonesOutput, error)
	ListLandingZonesWithContext(aws.Context, *controltower.ListLandingZonesInput, ...request.Option) (*controltower.ListLandingZonesOutput, error)
	ListLandingZonesRequest(*controltower.ListLandingZonesInput) (*request.Request, *controltower.ListLandingZonesOutput)

	ListLandingZonesPages(*controltower.ListLandingZonesInput, func(*controltower.ListLandingZonesOutput, bool) bool) error
	ListLandingZonesPagesWithContext(aws.Context, *controltower.ListLandingZonesInput, func(*controltower.ListLandingZonesOutput, bool) bool, ...request.Option) error

	ListTagsForResource(*controltower.ListTagsForResourceInput) (*controltower.ListTagsForResourceOutput, error)
	ListTagsForResourceWithContext(aws.Context, *controltower.ListTagsForResourceInput, ...request.Option) (*controltower.ListTagsForResourceOutput, error)
	ListTagsForResourceRequest(*controltower.ListTagsForResourceInput) (*request.Request, *controltower.ListTagsForResourceOutput)

	ResetLandingZone(*controltower.ResetLandingZoneInput) (*controltower.ResetLandingZoneOutput, error)
	ResetLandingZoneWithContext(aws.Context, *controltower.ResetLandingZoneInput, ...request.Option) (*controltower.ResetLandingZoneOutput, error)
	ResetLandingZoneRequest(*controltower.ResetLandingZoneInput) (*request.Request, *controltower.ResetLandingZoneOutput)

	TagResource(*controltower.TagResourceInput) (*controltower.TagResourceOutput, error)
	TagResourceWithContext(aws.Context, *controltower.TagResourceInput, ...request.Option) (*controltower.TagResourceOutput, error)
	TagResourceRequest(*controltower.TagResourceInput) (*request.Request, *controltower.TagResourceOutput)

	UntagResource(*controltower.UntagResourceInput) (*controltower.UntagResourceOutput, error)
	UntagResourceWithContext(aws.Context, *controltower.UntagResourceInput, ...request.Option) (*controltower.UntagResourceOutput, error)
	UntagResourceRequest(*controltower.UntagResourceInput) (*request.Request, *controltower.UntagResourceOutput)
}

var _ ControlTowerAPI = (*controltower.ControlTower)(nil)
