
commonMain.aws.sdk.kotlin.services.lexruntimev2.serde.StartConversationOperationSerializer.kt Maven / Gradle / Ivy
// Code generated by smithy-kotlin-codegen. DO NOT EDIT!
package aws.sdk.kotlin.services.lexruntimev2.serde
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.operation.HttpSerializer
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.operation.ExecutionContext
import aws.smithy.kotlin.runtime.text.encoding.PercentEncoding
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.job
internal class StartConversationOperationSerializer: HttpSerializer.Streaming {
override suspend fun serialize(context: ExecutionContext, input: StartConversationRequest): HttpRequestBuilder {
val builder = HttpRequestBuilder()
builder.method = HttpMethod.POST
builder.url {
requireNotNull(input.botId) { "botId is bound to the URI and must not be null" }
requireNotNull(input.botAliasId) { "botAliasId is bound to the URI and must not be null" }
requireNotNull(input.localeId) { "localeId is bound to the URI and must not be null" }
requireNotNull(input.sessionId) { "sessionId is bound to the URI and must not be null" }
path.encodedSegments {
add(PercentEncoding.Path.encode("bots"))
add(PercentEncoding.SmithyLabel.encode(input.botId))
add(PercentEncoding.Path.encode("botAliases"))
add(PercentEncoding.SmithyLabel.encode(input.botAliasId))
add(PercentEncoding.Path.encode("botLocales"))
add(PercentEncoding.SmithyLabel.encode(input.localeId))
add(PercentEncoding.Path.encode("sessions"))
add(PercentEncoding.SmithyLabel.encode(input.sessionId))
add(PercentEncoding.Path.encode("conversation"))
}
}
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