Skip to content

Commit 37faa13

Browse files
committed
use write data API in bidirectional streaming
1 parent 08babee commit 37faa13

37 files changed

Lines changed: 1499 additions & 32 deletions

File tree

generated/src/aws-cpp-sdk-bedrock-runtime/include/aws/bedrock-runtime/model/InvokeModelWithBidirectionalStreamInput.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <aws/bedrock-runtime/BedrockRuntime_EXPORTS.h>
88
#include <aws/bedrock-runtime/model/BidirectionalInputPayloadPart.h>
99
#include <aws/core/utils/event/EventStream.h>
10+
#include <aws/core/utils/stream/HttpWriteDataStreamBuf.h>
1011

1112
#include <utility>
1213

@@ -22,6 +23,9 @@ namespace Model {
2223
*/
2324
class AWS_BEDROCKRUNTIME_API InvokeModelWithBidirectionalStreamInput : public Aws::Utils::Event::EventEncoderStream {
2425
public:
26+
InvokeModelWithBidirectionalStreamInput() = default;
27+
explicit InvokeModelWithBidirectionalStreamInput(std::shared_ptr<Aws::Utils::Stream::HttpWriteDataStreamBuf> streambuf)
28+
: Aws::Utils::Event::EventEncoderStream(std::move(streambuf)) {}
2529
InvokeModelWithBidirectionalStreamInput& WriteBidirectionalInputPayloadPart(const BidirectionalInputPayloadPart& value) {
2630
Aws::Utils::Event::Message msg;
2731
msg.InsertEventHeader(":message-type", Aws::String("event"));

generated/src/aws-cpp-sdk-bedrock-runtime/source/BedrockRuntimeClient.cpp

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <aws/core/utils/logging/LogMacros.h>
3131
#include <aws/core/utils/memory/stl/AWSStringStream.h>
3232
#include <aws/core/utils/threading/Executor.h>
33+
#include <smithy/client/SmithyBidirectionalStreamingWriteDataTask.h>
3334
#include <smithy/client/SmithyEventStreamingAsyncTask.h>
3435
#include <smithy/identity/resolver/built-in/AwsCredentialsProviderIdentityResolver.h>
3536
#include <smithy/identity/resolver/built-in/DefaultAwsCredentialIdentityResolver.h>
@@ -387,6 +388,30 @@ void BedrockRuntimeClient::InvokeModelWithBidirectionalStreamAsync(
387388
resolvedEndpoint.AddPathSegments("/invoke-with-bidirectional-stream");
388389
};
389390

391+
#if AWS_SDK_USE_CRT_HTTP
392+
// Push-based WriteData path (CRT HTTP client only)
393+
auto writeDataStreamBuf = Aws::MakeShared<Aws::Utils::Stream::HttpWriteDataStreamBuf>(ALLOCATION_TAG, m_httpClient);
394+
auto eventEncoderStream = Aws::MakeShared<Model::InvokeModelWithBidirectionalStreamInput>(ALLOCATION_TAG, writeDataStreamBuf);
395+
request.SetBody(eventEncoderStream);
396+
397+
auto requestCopy = Aws::MakeShared<InvokeModelWithBidirectionalStreamRequest>(ALLOCATION_TAG, request);
398+
399+
auto authCallback = [&](std::shared_ptr<smithy::client::AwsSmithyClientAsyncRequestContext> ctx) -> void {
400+
eventEncoderStream->SetSigningCallback([this, ctx, eventEncoderStream](Aws::Utils::Event::Message& message, Aws::String& seed) -> bool {
401+
auto outcome = SignEventMessage(message, seed, ctx);
402+
return outcome.IsSuccess();
403+
});
404+
};
405+
406+
auto asyncTask = smithy::client::CreateSmithyBidirectionalWriteDataTask<InvokeModelWithBidirectionalStreamOutcome>(
407+
this, requestCopy, handler, handlerContext, eventEncoderStream, writeDataStreamBuf, std::move(endpointCallback),
408+
std::move(authCallback));
409+
auto sem = asyncTask.GetSemaphore();
410+
m_clientConfiguration.executor->Submit(std::move(asyncTask));
411+
sem->WaitOne();
412+
streamReadyHandler(*eventEncoderStream);
413+
#else
414+
// Pull-based path
390415
auto eventEncoderStream = Aws::MakeShared<Model::InvokeModelWithBidirectionalStreamInput>(ALLOCATION_TAG);
391416
auto authCallback = [&](std::shared_ptr<smithy::client::AwsSmithyClientAsyncRequestContext> ctx) -> void {
392417
eventEncoderStream->SetSigningCallback([this, ctx, eventEncoderStream](Aws::Utils::Event::Message& message, Aws::String& seed) -> bool {
@@ -395,15 +420,16 @@ void BedrockRuntimeClient::InvokeModelWithBidirectionalStreamAsync(
395420
});
396421
};
397422
auto requestCopy = Aws::MakeShared<InvokeModelWithBidirectionalStreamRequest>("InvokeModelWithBidirectionalStream", request);
398-
requestCopy->SetBody(eventEncoderStream); // this becomes the body of the request
399-
request.SetBody(eventEncoderStream); // this becomes the body of the request
423+
requestCopy->SetBody(eventEncoderStream);
424+
request.SetBody(eventEncoderStream);
400425

401426
auto asyncTask = smithy::client::CreateSmithyBidirectionalEventStreamTask<InvokeModelWithBidirectionalStreamOutcome>(
402427
this, requestCopy, handler, handlerContext, eventEncoderStream, endpointCallback, authCallback);
403428
auto sem = asyncTask.GetSemaphore();
404429
m_clientConfiguration.executor->Submit(std::move(asyncTask));
405430
sem->WaitOne();
406431
streamReadyHandler(*eventEncoderStream);
432+
#endif
407433
}
408434
InvokeModelWithResponseStreamOutcome BedrockRuntimeClient::InvokeModelWithResponseStream(
409435
InvokeModelWithResponseStreamRequest& request) const {

generated/src/aws-cpp-sdk-connecthealth/include/aws/connecthealth/model/MedicalScribeInputStream.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <aws/connecthealth/model/MedicalScribeConfigurationEvent.h>
1010
#include <aws/connecthealth/model/MedicalScribeSessionControlEvent.h>
1111
#include <aws/core/utils/event/EventStream.h>
12+
#include <aws/core/utils/stream/HttpWriteDataStreamBuf.h>
1213

1314
#include <utility>
1415

@@ -24,6 +25,9 @@ namespace Model {
2425
*/
2526
class AWS_CONNECTHEALTH_API MedicalScribeInputStream : public Aws::Utils::Event::EventEncoderStream {
2627
public:
28+
MedicalScribeInputStream() = default;
29+
explicit MedicalScribeInputStream(std::shared_ptr<Aws::Utils::Stream::HttpWriteDataStreamBuf> streambuf)
30+
: Aws::Utils::Event::EventEncoderStream(std::move(streambuf)) {}
2731
MedicalScribeInputStream& WriteMedicalScribeAudioEvent(const MedicalScribeAudioEvent& value) {
2832
Aws::Utils::Event::Message msg;
2933
msg.InsertEventHeader(":message-type", Aws::String("event"));

generated/src/aws-cpp-sdk-connecthealth/source/ConnectHealthClient.cpp

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <aws/connecthealth/model/UntagResourceRequest.h>
2525
#include <aws/core/auth/AWSAuthSigner.h>
2626
#include <aws/core/auth/AWSCredentialsProviderChain.h>
27+
#include <aws/core/client/AWSClientBidirectionalStreaming.h>
2728
#include <aws/core/client/AWSClientEventStreamingAsyncTask.h>
2829
#include <aws/core/client/CoreErrors.h>
2930
#include <aws/core/client/RetryStrategy.h>
@@ -517,10 +518,43 @@ void ConnectHealthClient::StartMedicalScribeListeningSessionAsync(
517518
}
518519
endpointResolutionOutcome.GetResult().AddPathSegments("/medical-scribe-stream/");
519520

521+
#if AWS_SDK_USE_CRT_HTTP
522+
// Push-based WriteData path (CRT HTTP client only)
523+
auto writeDataStreamBuf = Aws::MakeShared<Aws::Utils::Stream::HttpWriteDataStreamBuf>(ALLOCATION_TAG, GetHttpClient());
524+
auto signer = GetSignerByName(Aws::Auth::EVENTSTREAM_SIGV4_SIGNER);
525+
526+
auto eventEncoderStream = Aws::MakeShared<Model::MedicalScribeInputStream>(ALLOCATION_TAG, writeDataStreamBuf);
527+
eventEncoderStream->SetSigner(signer);
528+
529+
auto requestCopy = Aws::MakeShared<StartMedicalScribeListeningSessionRequest>(ALLOCATION_TAG, request);
530+
request.SetInputStream(eventEncoderStream);
531+
532+
auto& endpoint = endpointResolutionOutcome.GetResult();
533+
auto httpRequest =
534+
CreateHttpRequest(endpoint.GetURI(), Aws::Http::HttpMethod::HTTP_POST, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
535+
httpRequest->SetEventStreamRequest(true);
536+
httpRequest->SetHasEventStreamResponse(true);
537+
BuildHttpRequest(*requestCopy, httpRequest);
538+
539+
if (!signer->SignRequest(*httpRequest, nullptr, nullptr, true)) {
540+
handler(this, request,
541+
StartMedicalScribeListeningSessionOutcome(
542+
Aws::Client::AWSError<CoreErrors>(CoreErrors::CLIENT_SIGNING_FAILURE, "", "Failed to sign request", false)),
543+
handlerContext);
544+
return;
545+
}
546+
eventEncoderStream->SetSignatureSeed(Aws::Client::GetAuthorizationHeader(*httpRequest));
547+
548+
Aws::Client::SubmitBidirectionalStreamingRequest<ConnectHealthClient, StartMedicalScribeListeningSessionOutcome,
549+
StartMedicalScribeListeningSessionRequest, Model::MedicalScribeInputStream>(
550+
this, request, requestCopy, eventEncoderStream, writeDataStreamBuf, httpRequest, m_clientConfiguration.executor.get(),
551+
streamReadyHandler, handler, handlerContext);
552+
#else
553+
// Pull-based path (curl/WinHTTP)
520554
auto eventEncoderStream = Aws::MakeShared<Model::MedicalScribeInputStream>(ALLOCATION_TAG);
521555
eventEncoderStream->SetSigner(GetSignerByName(Aws::Auth::EVENTSTREAM_SIGV4_SIGNER));
522556
auto requestCopy = Aws::MakeShared<StartMedicalScribeListeningSessionRequest>("StartMedicalScribeListeningSession", request);
523-
requestCopy->SetInputStream(eventEncoderStream); // this becomes the body of the request
557+
requestCopy->SetInputStream(eventEncoderStream);
524558
request.SetInputStream(eventEncoderStream);
525559

526560
auto asyncTask = CreateBidirectionalEventStreamTask<StartMedicalScribeListeningSessionOutcome>(
@@ -529,6 +563,7 @@ void ConnectHealthClient::StartMedicalScribeListeningSessionAsync(
529563
m_clientConfiguration.executor->Submit(std::move(asyncTask));
530564
sem->WaitOne();
531565
streamReadyHandler(*eventEncoderStream);
566+
#endif
532567
}
533568
StartPatientInsightsJobOutcome ConnectHealthClient::StartPatientInsightsJob(const StartPatientInsightsJobRequest& request) const {
534569
if (!request.DomainIdHasBeenSet()) {

generated/src/aws-cpp-sdk-lexv2-runtime/include/aws/lexv2-runtime/model/StartConversationRequestEventStream.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#pragma once
77
#include <aws/core/utils/event/EventStream.h>
8+
#include <aws/core/utils/stream/HttpWriteDataStreamBuf.h>
89
#include <aws/lexv2-runtime/LexRuntimeV2_EXPORTS.h>
910
#include <aws/lexv2-runtime/model/AudioInputEvent.h>
1011
#include <aws/lexv2-runtime/model/ConfigurationEvent.h>
@@ -27,6 +28,9 @@ namespace Model {
2728
*/
2829
class AWS_LEXRUNTIMEV2_API StartConversationRequestEventStream : public Aws::Utils::Event::EventEncoderStream {
2930
public:
31+
StartConversationRequestEventStream() = default;
32+
explicit StartConversationRequestEventStream(std::shared_ptr<Aws::Utils::Stream::HttpWriteDataStreamBuf> streambuf)
33+
: Aws::Utils::Event::EventEncoderStream(std::move(streambuf)) {}
3034
StartConversationRequestEventStream& WriteConfigurationEvent(const ConfigurationEvent& value) {
3135
Aws::Utils::Event::Message msg;
3236
msg.InsertEventHeader(":message-type", Aws::String("event"));

generated/src/aws-cpp-sdk-lexv2-runtime/source/LexRuntimeV2Client.cpp

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <aws/core/auth/AWSAuthSigner.h>
77
#include <aws/core/auth/AWSCredentialsProviderChain.h>
8+
#include <aws/core/client/AWSClientBidirectionalStreaming.h>
89
#include <aws/core/client/AWSClientEventStreamingAsyncTask.h>
910
#include <aws/core/client/CoreErrors.h>
1011
#include <aws/core/client/RetryStrategy.h>
@@ -489,10 +490,43 @@ void LexRuntimeV2Client::StartConversationAsync(Model::StartConversationRequest&
489490
endpointResolutionOutcome.GetResult().AddPathSegment(request.GetSessionId());
490491
endpointResolutionOutcome.GetResult().AddPathSegments("/conversation");
491492

493+
#if AWS_SDK_USE_CRT_HTTP
494+
// Push-based WriteData path (CRT HTTP client only)
495+
auto writeDataStreamBuf = Aws::MakeShared<Aws::Utils::Stream::HttpWriteDataStreamBuf>(ALLOCATION_TAG, GetHttpClient());
496+
auto signer = GetSignerByName(Aws::Auth::EVENTSTREAM_SIGV4_SIGNER);
497+
498+
auto eventEncoderStream = Aws::MakeShared<Model::StartConversationRequestEventStream>(ALLOCATION_TAG, writeDataStreamBuf);
499+
eventEncoderStream->SetSigner(signer);
500+
501+
auto requestCopy = Aws::MakeShared<StartConversationRequest>(ALLOCATION_TAG, request);
502+
request.SetRequestEventStream(eventEncoderStream);
503+
504+
auto& endpoint = endpointResolutionOutcome.GetResult();
505+
auto httpRequest =
506+
CreateHttpRequest(endpoint.GetURI(), Aws::Http::HttpMethod::HTTP_POST, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
507+
httpRequest->SetEventStreamRequest(true);
508+
httpRequest->SetHasEventStreamResponse(true);
509+
BuildHttpRequest(*requestCopy, httpRequest);
510+
511+
if (!signer->SignRequest(*httpRequest, nullptr, nullptr, true)) {
512+
handler(this, request,
513+
StartConversationOutcome(
514+
Aws::Client::AWSError<CoreErrors>(CoreErrors::CLIENT_SIGNING_FAILURE, "", "Failed to sign request", false)),
515+
handlerContext);
516+
return;
517+
}
518+
eventEncoderStream->SetSignatureSeed(Aws::Client::GetAuthorizationHeader(*httpRequest));
519+
520+
Aws::Client::SubmitBidirectionalStreamingRequest<LexRuntimeV2Client, StartConversationOutcome, StartConversationRequest,
521+
Model::StartConversationRequestEventStream>(
522+
this, request, requestCopy, eventEncoderStream, writeDataStreamBuf, httpRequest, m_clientConfiguration.executor.get(),
523+
streamReadyHandler, handler, handlerContext);
524+
#else
525+
// Pull-based path (curl/WinHTTP)
492526
auto eventEncoderStream = Aws::MakeShared<Model::StartConversationRequestEventStream>(ALLOCATION_TAG);
493527
eventEncoderStream->SetSigner(GetSignerByName(Aws::Auth::EVENTSTREAM_SIGV4_SIGNER));
494528
auto requestCopy = Aws::MakeShared<StartConversationRequest>("StartConversation", request);
495-
requestCopy->SetRequestEventStream(eventEncoderStream); // this becomes the body of the request
529+
requestCopy->SetRequestEventStream(eventEncoderStream);
496530
request.SetRequestEventStream(eventEncoderStream);
497531

498532
auto asyncTask = CreateBidirectionalEventStreamTask<StartConversationOutcome>(this, endpointResolutionOutcome.GetResultWithOwnership(),
@@ -501,4 +535,5 @@ void LexRuntimeV2Client::StartConversationAsync(Model::StartConversationRequest&
501535
m_clientConfiguration.executor->Submit(std::move(asyncTask));
502536
sem->WaitOne();
503537
streamReadyHandler(*eventEncoderStream);
538+
#endif
504539
}

generated/src/aws-cpp-sdk-polly/include/aws/polly/model/StartSpeechSynthesisStreamActionStream.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#pragma once
77
#include <aws/core/utils/event/EventStream.h>
8+
#include <aws/core/utils/stream/HttpWriteDataStreamBuf.h>
89
#include <aws/polly/Polly_EXPORTS.h>
910
#include <aws/polly/model/CloseStreamEvent.h>
1011
#include <aws/polly/model/TextEvent.h>
@@ -23,6 +24,9 @@ namespace Model {
2324
*/
2425
class AWS_POLLY_API StartSpeechSynthesisStreamActionStream : public Aws::Utils::Event::EventEncoderStream {
2526
public:
27+
StartSpeechSynthesisStreamActionStream() = default;
28+
explicit StartSpeechSynthesisStreamActionStream(std::shared_ptr<Aws::Utils::Stream::HttpWriteDataStreamBuf> streambuf)
29+
: Aws::Utils::Event::EventEncoderStream(std::move(streambuf)) {}
2630
StartSpeechSynthesisStreamActionStream& WriteTextEvent(const TextEvent& value) {
2731
Aws::Utils::Event::Message msg;
2832
msg.InsertEventHeader(":message-type", Aws::String("event"));

generated/src/aws-cpp-sdk-polly/source/PollyClient.cpp

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <aws/core/auth/AWSAuthSigner.h>
77
#include <aws/core/auth/AWSCredentialsProviderChain.h>
8+
#include <aws/core/client/AWSClientBidirectionalStreaming.h>
89
#include <aws/core/client/AWSClientEventStreamingAsyncTask.h>
910
#include <aws/core/client/CoreErrors.h>
1011
#include <aws/core/client/RetryStrategy.h>
@@ -340,10 +341,43 @@ void PollyClient::StartSpeechSynthesisStreamAsync(Model::StartSpeechSynthesisStr
340341
}
341342
endpointResolutionOutcome.GetResult().AddPathSegments("/v1/synthesisStream");
342343

344+
#if AWS_SDK_USE_CRT_HTTP
345+
// Push-based WriteData path (CRT HTTP client only)
346+
auto writeDataStreamBuf = Aws::MakeShared<Aws::Utils::Stream::HttpWriteDataStreamBuf>(ALLOCATION_TAG, GetHttpClient());
347+
auto signer = GetSignerByName(Aws::Auth::EVENTSTREAM_SIGV4_SIGNER);
348+
349+
auto eventEncoderStream = Aws::MakeShared<Model::StartSpeechSynthesisStreamActionStream>(ALLOCATION_TAG, writeDataStreamBuf);
350+
eventEncoderStream->SetSigner(signer);
351+
352+
auto requestCopy = Aws::MakeShared<StartSpeechSynthesisStreamRequest>(ALLOCATION_TAG, request);
353+
request.SetActionStream(eventEncoderStream);
354+
355+
auto& endpoint = endpointResolutionOutcome.GetResult();
356+
auto httpRequest =
357+
CreateHttpRequest(endpoint.GetURI(), Aws::Http::HttpMethod::HTTP_POST, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
358+
httpRequest->SetEventStreamRequest(true);
359+
httpRequest->SetHasEventStreamResponse(true);
360+
BuildHttpRequest(*requestCopy, httpRequest);
361+
362+
if (!signer->SignRequest(*httpRequest, nullptr, nullptr, true)) {
363+
handler(this, request,
364+
StartSpeechSynthesisStreamOutcome(
365+
Aws::Client::AWSError<CoreErrors>(CoreErrors::CLIENT_SIGNING_FAILURE, "", "Failed to sign request", false)),
366+
handlerContext);
367+
return;
368+
}
369+
eventEncoderStream->SetSignatureSeed(Aws::Client::GetAuthorizationHeader(*httpRequest));
370+
371+
Aws::Client::SubmitBidirectionalStreamingRequest<PollyClient, StartSpeechSynthesisStreamOutcome, StartSpeechSynthesisStreamRequest,
372+
Model::StartSpeechSynthesisStreamActionStream>(
373+
this, request, requestCopy, eventEncoderStream, writeDataStreamBuf, httpRequest, m_clientConfiguration.executor.get(),
374+
streamReadyHandler, handler, handlerContext);
375+
#else
376+
// Pull-based path (curl/WinHTTP)
343377
auto eventEncoderStream = Aws::MakeShared<Model::StartSpeechSynthesisStreamActionStream>(ALLOCATION_TAG);
344378
eventEncoderStream->SetSigner(GetSignerByName(Aws::Auth::EVENTSTREAM_SIGV4_SIGNER));
345379
auto requestCopy = Aws::MakeShared<StartSpeechSynthesisStreamRequest>("StartSpeechSynthesisStream", request);
346-
requestCopy->SetActionStream(eventEncoderStream); // this becomes the body of the request
380+
requestCopy->SetActionStream(eventEncoderStream);
347381
request.SetActionStream(eventEncoderStream);
348382

349383
auto asyncTask = CreateBidirectionalEventStreamTask<StartSpeechSynthesisStreamOutcome>(
@@ -352,6 +386,7 @@ void PollyClient::StartSpeechSynthesisStreamAsync(Model::StartSpeechSynthesisStr
352386
m_clientConfiguration.executor->Submit(std::move(asyncTask));
353387
sem->WaitOne();
354388
streamReadyHandler(*eventEncoderStream);
389+
#endif
355390
}
356391
StartSpeechSynthesisTaskOutcome PollyClient::StartSpeechSynthesisTask(const StartSpeechSynthesisTaskRequest& request) const {
357392
auto uriResolver = [&](Aws::Endpoint::ResolveEndpointOutcome& endpointResolutionOutcome) {

generated/src/aws-cpp-sdk-qbusiness/include/aws/qbusiness/model/ChatInputStream.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#pragma once
77
#include <aws/core/utils/event/EventStream.h>
88
#include <aws/core/utils/json/JsonSerializer.h>
9+
#include <aws/core/utils/stream/HttpWriteDataStreamBuf.h>
910
#include <aws/qbusiness/QBusiness_EXPORTS.h>
1011
#include <aws/qbusiness/model/ActionExecutionEvent.h>
1112
#include <aws/qbusiness/model/AttachmentInputEvent.h>
@@ -28,6 +29,9 @@ namespace Model {
2829
*/
2930
class AWS_QBUSINESS_API ChatInputStream : public Aws::Utils::Event::EventEncoderStream {
3031
public:
32+
ChatInputStream() = default;
33+
explicit ChatInputStream(std::shared_ptr<Aws::Utils::Stream::HttpWriteDataStreamBuf> streambuf)
34+
: Aws::Utils::Event::EventEncoderStream(std::move(streambuf)) {}
3135
ChatInputStream& WriteConfigurationEvent(const ConfigurationEvent& value) {
3236
Aws::Utils::Event::Message msg;
3337
msg.InsertEventHeader(":message-type", Aws::String("event"));

0 commit comments

Comments
 (0)