You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: api_op_UpdateChatControlsConfiguration.go
    path of file: ./repos/aws-sdk-go-v2/service/qbusiness
    
    the code of the file until where you have to start completion: // Code generated by smithy-go-codegen DO NOT EDIT.

package qbusiness

import (
	"context"
	"fmt"
	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
	"github.com/aws/aws-sdk-go-v2/service/qbusiness/types"
	"github.com/aws/smithy-go/middleware"
	smithyhttp "github.com/aws/smithy-go/transport/http"
)

// Updates an set of chat controls configured for an existing Amazon Q application.
func (c *Client) UpdateChatControlsConfiguration(ctx context.Context, params *UpdateChatControlsConfigurationInput, optFns ...func(*Options)) (*UpdateChatControlsConfigurationOutput, error) {
	if params == nil {
		params = &UpdateChatControlsConfigurationInput{}
	}

	result, metadata, err := c.invokeOperation(ctx, "UpdateChatControlsConfiguration", params, optFns, c.addOperationUpdateChatControlsConfigurationMiddlewares)
	if err != nil {
		return nil, err
	}

	out := result.(*UpdateChatControlsConfigurationOutput)
	out.ResultMetadata = metadata
	return out, nil
}

type UpdateChatControlsConfigurationInput struct {

	// The identifier of the application for which the chat controls are configured.
	//
	// This member is required.
	ApplicationId *string

	// The phrases blocked from chat by your chat control configuration.
	BlockedPhrasesConfigurationUpdate *types.BlockedPhrasesConfigurationUpdate

	// A token that you provide to identify the request to update a Amazon Q
	// application chat configuration.
	ClientToken *string

	// The response scope configured for your application. This determines whether
	// your application uses its retrieval augmented generation (RAG) system to
	// generate answers only from your enterprise data, or also uses the large language
	// models (LLM) knowledge to respons to end user questions in chat.
	ResponseScope types.ResponseScope

	// The configured topic specific chat controls you want to update.
	TopicConfigurationsToCreateOrUpdate []types.TopicConfiguration

	// The configured topic specific chat controls you want to delete.
	TopicConfigurationsToDelete []types.TopicConfiguration

	noSmithyDocumentSerde
}

type UpdateChatControlsConfigurationOutput struct {
	// Metadata pertain
    
func (c *Client) addOperationUpdateChatControlsConfigurationMiddlewares(stack *middleware.Stack, options Options) (err error) {
	if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil {
		return err
	}
	err = stack.Serialize.Add(&awsRestjson1_serializeOpUpdateChatControlsConfiguration{}, middleware.After)
	if err != nil {
		return err
	}
	err = stack.Deserialize.Add(&awsRestjson1_deserializeOpUpdateChatControlsConfiguration{}, middleware.After)
	if err != nil {
		return err
	}
	if err := addProtocolFinalizerMiddlewares(stack, options, "UpdateChatControlsConfiguration"); err != nil {
		return fmt.Errorf("add protocol finalizers: %v", err)
	}

	if err = addlegacyEndpointContextSetter(stack, options); err != nil {
		return err
	}
	if err = addSetLoggerMiddleware(stack, options); err != nil {
		return err
	}
	if err = addClientRequestID(stack); err != nil {
		return err
	}
	if err = addComputeContentLength(stack); err != nil {
		return err
	}
	if err = addResolveEndpointMiddleware(stack, options); err != nil {
		return err
	}
	if err = addComputePayloadSHA256(stack); err != nil {
		return err
	}
	if err = addRetry(stack, options); err != nil {
		return err
	}
	if err = addRawResponseToMetadata(stack); err != nil {
		return err
	}
	if err = addRecordResponseTiming(stack); err != nil {
		return err
	}
	if err = addClientUserAgent(stack, options); err != nil {
		return err
	}
	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
		return err
	}
	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
		return err
	}
	if err = addSetLegacyContextSigningOptionsMiddleware(stack); err != nil {
		return err
	}
	if err = addIdempotencyToken_opUpdateChatControlsConfigurationMiddleware(stack, options); err != nil {
		return err
	}
	if err = addOpUpdateChatControlsConfigurationValidationMiddleware(stack); err != nil {
		return err
	}
	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opUpdateChatControlsConfiguration(options.Region), middleware.Before); err != nil {
		return err
	}
	if err = addRecursionDetection(stack); err != nil {
		return err
	}
	if err = addRequestIDRetrieverMiddleware(stack); err != nil {
		return err
	}
	if err = addResponseErrorMiddleware(stack); err != nil {
		return err
	}
	if err = addRequestResponseLogging(stack, options); err != nil {
		return err
	}
	if err = addDisableHTTPSMiddleware(stack, options); err != nil {
		return err
	}
	return nil
}