
commonMain.aws.sdk.kotlin.services.lexruntimev2.transform.StartConversationOperationSerializer.kt Maven / Gradle / Ivy
// Code generated by smithy-kotlin-codegen. DO NOT EDIT!
package aws.sdk.kotlin.services.lexruntimev2.transform
import aws.sdk.kotlin.services.lexruntimev2.model.ConversationMode
import aws.sdk.kotlin.services.lexruntimev2.model.StartConversationRequest
import aws.sdk.kotlin.services.lexruntimev2.model.StartConversationRequestEventStream
import aws.smithy.kotlin.runtime.auth.awssigning.AwsSigningAttributes
import aws.smithy.kotlin.runtime.auth.awssigning.DefaultAwsSigner
import aws.smithy.kotlin.runtime.auth.awssigning.HashSpecification
import aws.smithy.kotlin.runtime.awsprotocol.eventstream.HeaderValue
import aws.smithy.kotlin.runtime.awsprotocol.eventstream.Message
import aws.smithy.kotlin.runtime.awsprotocol.eventstream.asEventStreamHttpBody
import aws.smithy.kotlin.runtime.awsprotocol.eventstream.buildMessage
import aws.smithy.kotlin.runtime.awsprotocol.eventstream.encode
import aws.smithy.kotlin.runtime.awsprotocol.eventstream.sign
import aws.smithy.kotlin.runtime.http.HttpBody
import aws.smithy.kotlin.runtime.http.HttpMethod
import aws.smithy.kotlin.runtime.http.content.ByteArrayContent
import aws.smithy.kotlin.runtime.http.operation.HttpSerialize
import aws.smithy.kotlin.runtime.http.request.HttpRequestBuilder
import aws.smithy.kotlin.runtime.http.request.headers
import aws.smithy.kotlin.runtime.http.request.url
import aws.smithy.kotlin.runtime.http.util.encodeLabel
import aws.smithy.kotlin.runtime.operation.ExecutionContext
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.job
internal class StartConversationOperationSerializer: HttpSerialize {
override suspend fun serialize(context: ExecutionContext, input: StartConversationRequest): HttpRequestBuilder {
val builder = HttpRequestBuilder()
builder.method = HttpMethod.POST
builder.url {
val pathSegments = listOf(
"bots",
"${input.botId}".encodeLabel(),
"botAliases",
"${input.botAliasId}".encodeLabel(),
"botLocales",
"${input.localeId}".encodeLabel(),
"sessions",
"${input.sessionId}".encodeLabel(),
"conversation",
)
path = pathSegments.joinToString(separator = "/", prefix = "/")
}
builder.headers {
if (input.conversationMode != null) append("x-amz-lex-conversation-mode", input.conversationMode.value)
}
builder.body = serializeStartConversationOperationBody(context, input)
return builder
}
}
internal suspend fun serializeStartConversationOperationBody(context: ExecutionContext, input: StartConversationRequest): HttpBody {
val stream = input.requestEventStream ?: return HttpBody.Empty
context[AwsSigningAttributes.HashSpecification] = HashSpecification.EmptyBody
context[AwsSigningAttributes.Signer] = DefaultAwsSigner
context[AwsSigningAttributes.RequestSignature] = CompletableDeferred(context.coroutineContext.job)
val messages = stream
.map(::encodeStartConversationStartConversationRequestEventStreamEventMessage)
.sign(context)
.encode()
return messages.asEventStreamHttpBody(context)
}
private fun encodeStartConversationStartConversationRequestEventStreamEventMessage(input: StartConversationRequestEventStream): Message = buildMessage {
addHeader(":message-type", HeaderValue.String("event"))
when(input) {
is StartConversationRequestEventStream.ConfigurationEvent -> {
addHeader(":event-type", HeaderValue.String("ConfigurationEvent"))
addHeader(":content-type", HeaderValue.String("application/json"))
payload = serializeConfigurationEventPayload(input.value)
}
is StartConversationRequestEventStream.AudioInputEvent -> {
addHeader(":event-type", HeaderValue.String("AudioInputEvent"))
addHeader(":content-type", HeaderValue.String("application/json"))
payload = serializeAudioInputEventPayload(input.value)
}
is StartConversationRequestEventStream.DtmfInputEvent -> {
addHeader(":event-type", HeaderValue.String("DTMFInputEvent"))
addHeader(":content-type", HeaderValue.String("application/json"))
payload = serializeDtmfInputEventPayload(input.value)
}
is StartConversationRequestEventStream.TextInputEvent -> {
addHeader(":event-type", HeaderValue.String("TextInputEvent"))
addHeader(":content-type", HeaderValue.String("application/json"))
payload = serializeTextInputEventPayload(input.value)
}
is StartConversationRequestEventStream.PlaybackCompletionEvent -> {
addHeader(":event-type", HeaderValue.String("PlaybackCompletionEvent"))
addHeader(":content-type", HeaderValue.String("application/json"))
payload = serializePlaybackCompletionEventPayload(input.value)
}
is StartConversationRequestEventStream.DisconnectionEvent -> {
addHeader(":event-type", HeaderValue.String("DisconnectionEvent"))
addHeader(":content-type", HeaderValue.String("application/json"))
payload = serializeDisconnectionEventPayload(input.value)
}
is StartConversationRequestEventStream.SdkUnknown -> error("cannot serialize the unknown event type!")
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy