Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
da909ca
Smithy code gen for pagination
kai-ion Jan 13, 2026
61824e5
Smithy code gen for pagination
kai-ion Jan 13, 2026
4aaac87
updated parser to use c2j mapping names
kai-ion Jan 14, 2026
4074797
updated writer to use c2j mapping names and deleted space in map.json
kai-ion Jan 14, 2026
06b9191
fix file location
kai-ion Jan 15, 2026
29d67ab
added a compilation test
kai-ion Jan 15, 2026
8d52259
updated cppwriter to use smithy library
kai-ion Jan 15, 2026
938db88
changed parsers to be more generic
kai-ion Jan 15, 2026
8b8462b
added service name util
kai-ion Jan 15, 2026
ecc126a
filter out deprecated service
kai-ion Jan 15, 2026
58410cd
edgecases for backwards compatibility
kai-ion Jan 16, 2026
1290407
edgecases for backwards compatibility
kai-ion Jan 16, 2026
e9f866b
temporary fix for AccessAnalyzer which uses service-level pagination …
kai-ion Jan 16, 2026
f180197
temporary fix for amp
kai-ion Jan 17, 2026
e98b05e
temporary fix for B2BI
kai-ion Jan 17, 2026
2fd43f1
harded for missing abbreviation trait
kai-ion Jan 17, 2026
e38cc32
added new detection logic for conflicting service name and add sdk su…
kai-ion Jan 17, 2026
ab3fc21
added new new detection logic for conflicting service name and add sd…
kai-ion Jan 17, 2026
f38fc51
added new new new detection logic (next/Next token) for conflicting s…
kai-ion Jan 17, 2026
bd95508
added a patch for Chatbotclient paginator. CamelCase
kai-ion Jan 20, 2026
ecac02a
added a patch for cloudfront. uses a new suffix 2020_05_31
kai-ion Jan 20, 2026
dcbba86
added a patch to remove the unnessary version suffix strip
kai-ion Jan 20, 2026
2a8eb0b
added a patch to refactor duplication logic to shapeutil, and changed…
kai-ion Jan 20, 2026
666e0ec
added a patch to add codestar and hard coded maps
kai-ion Jan 21, 2026
13cf71e
added a patch to add deadline
kai-ion Jan 21, 2026
53e8658
added a patch to add transfer to abbreivation list and fix the servic…
kai-ion Jan 21, 2026
4ea1230
added a patch to ecr to fix GetLifecyclePolicyPreviewSdkResult.h. cha…
kai-ion Jan 21, 2026
0ec38e4
added a patch for elasticache
kai-ion Jan 21, 2026
345afc3
added a patch for lexv2-models.
kai-ion Jan 22, 2026
f4e22b5
added a patch for medialive
kai-ion Jan 22, 2026
deb9baf
added a patch for s3 list parts where
kai-ion Jan 22, 2026
2e9ae4d
added integration tests for s3,ec2,dynamodb
kai-ion Jan 22, 2026
d20e576
added a patch to fix std string usage
kai-ion Jan 22, 2026
ecbf152
changed variable naming from c2j to smithy and moved paginationCodege…
kai-ion Jan 22, 2026
884f98d
refactor code to shapeutil
kai-ion Jan 22, 2026
c4b4337
WaitUntilActive method parameter tableName was shadowing the class me…
kai-ion Jan 22, 2026
d1370ba
literally copy bucket integration test
kai-ion Jan 22, 2026
ae3eed2
updated codegen for c2j client to use CRTP base clients that have met…
kai-ion Jan 27, 2026
bb8aeb7
added a new codegen project for cpp-codegen
kai-ion Feb 3, 2026
1395993
reverted smoke test gen changes back to main
kai-ion Feb 4, 2026
74dc679
reverted smoke test gen changes back to main
kai-ion Feb 4, 2026
b409255
adding generic rendering generators
kai-ion Feb 4, 2026
fe3fc77
adding back removed dependencies and fixed integration test
kai-ion Feb 4, 2026
b5d3706
change pagepaginator to paginator
kai-ion Feb 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@ toolchains/android/
tools/code-generation/generator/target/
tools/code-generation/smithy/codegen/gradle/
tools/code-generation/smithy/codegen/.gradle/
tools/code-generation/smithy/cpp-codegen/.gradle/
tools/code-generation/smithy/cpp-codegen/output/
tools/code-generation/smithy/cpp-codegen/smithy-build.json

#config output
aws-cpp-sdk-core/include/aws/core/SDKConfig.h
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <aws/core/client/AWSClientAsyncCRTP.h>
#include <aws/core/client/ClientConfiguration.h>
#include <aws/dynamodb/DynamoDBErrorMarshaller.h>
#include <aws/dynamodb/DynamoDBPaginationBase.h>
#include <aws/dynamodb/DynamoDBServiceClientModel.h>
#include <aws/dynamodb/DynamoDB_EXPORTS.h>
#include <smithy/client/AwsSmithyClient.h>
Expand Down Expand Up @@ -40,7 +41,8 @@ class AWS_DYNAMODB_API DynamoDBClient
public smithy::client::AwsSmithyClientT<Aws::DynamoDB::SERVICE_NAME, Aws::DynamoDB::DynamoDBClientConfiguration,
smithy::AuthSchemeResolverBase<>, Aws::Crt::Variant<smithy::SigV4AuthScheme>,
DynamoDBEndpointProviderBase, smithy::client::JsonOutcomeSerializer,
smithy::client::JsonOutcome, Aws::Client::DynamoDBErrorMarshaller> {
smithy::client::JsonOutcome, Aws::Client::DynamoDBErrorMarshaller>,
public DynamoDBPaginationBase<DynamoDBClient> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

chefs kiss

public:
static const char* GetServiceName();
static const char* GetAllocationTag();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/

#pragma once
#include <aws/core/utils/pagination/Paginator.h>
#include <aws/dynamodb/DynamoDBClient.h>
#include <aws/dynamodb/model/ListContributorInsightsPaginationTraits.h>
#include <aws/dynamodb/model/ListExportsPaginationTraits.h>
#include <aws/dynamodb/model/ListImportsPaginationTraits.h>
#include <aws/dynamodb/model/ListTablesPaginationTraits.h>
#include <aws/dynamodb/model/QueryPaginationTraits.h>
#include <aws/dynamodb/model/ScanPaginationTraits.h>

namespace Aws {
namespace DynamoDB {

using ListContributorInsightsPaginator = Aws::Utils::Pagination::Paginator<DynamoDBClient, Model::ListContributorInsightsRequest,
Pagination::ListContributorInsightsPaginationTraits>;
using ListExportsPaginator =
Aws::Utils::Pagination::Paginator<DynamoDBClient, Model::ListExportsRequest, Pagination::ListExportsPaginationTraits>;
using ListImportsPaginator =
Aws::Utils::Pagination::Paginator<DynamoDBClient, Model::ListImportsRequest, Pagination::ListImportsPaginationTraits>;
using ListTablesPaginator =
Aws::Utils::Pagination::Paginator<DynamoDBClient, Model::ListTablesRequest, Pagination::ListTablesPaginationTraits>;
using QueryPaginator = Aws::Utils::Pagination::Paginator<DynamoDBClient, Model::QueryRequest, Pagination::QueryPaginationTraits>;
using ScanPaginator = Aws::Utils::Pagination::Paginator<DynamoDBClient, Model::ScanRequest, Pagination::ScanPaginationTraits>;

} // namespace DynamoDB
} // namespace Aws
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/

#pragma once

#include <aws/core/utils/pagination/Paginator.h>
#include <aws/dynamodb/model/ListContributorInsightsPaginationTraits.h>
#include <aws/dynamodb/model/ListExportsPaginationTraits.h>
#include <aws/dynamodb/model/ListImportsPaginationTraits.h>
#include <aws/dynamodb/model/ListTablesPaginationTraits.h>
#include <aws/dynamodb/model/QueryPaginationTraits.h>
#include <aws/dynamodb/model/ScanPaginationTraits.h>

#include <memory>

namespace Aws {
namespace DynamoDB {

class DynamoDBClient;

template <typename DerivedClient>
class DynamoDBPaginationBase {
public:
/**
* Create a paginator for ListContributorInsights operation
*/
Aws::Utils::Pagination::Paginator<DerivedClient, Model::ListContributorInsightsRequest,
Pagination::ListContributorInsightsPaginationTraits>
ListContributorInsightsPaginator(const Model::ListContributorInsightsRequest& request) {
return Aws::Utils::Pagination::Paginator<DerivedClient, Model::ListContributorInsightsRequest,
Pagination::ListContributorInsightsPaginationTraits>{
std::shared_ptr<DerivedClient>(static_cast<DerivedClient*>(this), [](DerivedClient*) {}), request};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

std::shared_ptr(static_cast<DerivedClient*>(this), {})

likely isnt what we want to be doing, you are creating a shared point from this then have a custom deleter [](DerivedClient*) {} that does nothing when delete is called. you are essentially trying to fit this into a shared pointer without using the actual properties of shared.

consider

#include <iostream>
#include <thread>

template<typename crtp_t>
class thing {
public:
  thing(crtp_t& ref) : ptr_(ref) {};
  void do_something() {
    ptr_.work();
  }
private:
  crtp_t& ptr_;
};

template <typename crtp_t>
class mixin {
 public:
  void operation() {
    thing<crtp_t> operation_thing{*static_cast<crtp_t*>(this)};
    operation_thing.do_something();
  }
};

class widget : public mixin<widget> {
public:
  void work() {
    std::cout << "hello from class\n";
  }
};

auto main() -> int {
  widget w{};
  w.operation();
  return 0;
}

which is long way of saying on PagePaginator make client a reference not a pointer

}

/**
* Create a paginator for ListExports operation
*/
Aws::Utils::Pagination::Paginator<DerivedClient, Model::ListExportsRequest, Pagination::ListExportsPaginationTraits> ListExportsPaginator(
const Model::ListExportsRequest& request) {
return Aws::Utils::Pagination::Paginator<DerivedClient, Model::ListExportsRequest, Pagination::ListExportsPaginationTraits>{
std::shared_ptr<DerivedClient>(static_cast<DerivedClient*>(this), [](DerivedClient*) {}), request};
}

/**
* Create a paginator for ListImports operation
*/
Aws::Utils::Pagination::Paginator<DerivedClient, Model::ListImportsRequest, Pagination::ListImportsPaginationTraits> ListImportsPaginator(
const Model::ListImportsRequest& request) {
return Aws::Utils::Pagination::Paginator<DerivedClient, Model::ListImportsRequest, Pagination::ListImportsPaginationTraits>{
std::shared_ptr<DerivedClient>(static_cast<DerivedClient*>(this), [](DerivedClient*) {}), request};
}

/**
* Create a paginator for ListTables operation
*/
Aws::Utils::Pagination::Paginator<DerivedClient, Model::ListTablesRequest, Pagination::ListTablesPaginationTraits> ListTablesPaginator(
const Model::ListTablesRequest& request) {
return Aws::Utils::Pagination::Paginator<DerivedClient, Model::ListTablesRequest, Pagination::ListTablesPaginationTraits>{
std::shared_ptr<DerivedClient>(static_cast<DerivedClient*>(this), [](DerivedClient*) {}), request};
}

/**
* Create a paginator for Query operation
*/
Aws::Utils::Pagination::Paginator<DerivedClient, Model::QueryRequest, Pagination::QueryPaginationTraits> QueryPaginator(
const Model::QueryRequest& request) {
return Aws::Utils::Pagination::Paginator<DerivedClient, Model::QueryRequest, Pagination::QueryPaginationTraits>{
std::shared_ptr<DerivedClient>(static_cast<DerivedClient*>(this), [](DerivedClient*) {}), request};
}

/**
* Create a paginator for Scan operation
*/
Aws::Utils::Pagination::Paginator<DerivedClient, Model::ScanRequest, Pagination::ScanPaginationTraits> ScanPaginator(
const Model::ScanRequest& request) {
return Aws::Utils::Pagination::Paginator<DerivedClient, Model::ScanRequest, Pagination::ScanPaginationTraits>{
std::shared_ptr<DerivedClient>(static_cast<DerivedClient*>(this), [](DerivedClient*) {}), request};
}
};
} // namespace DynamoDB
} // namespace Aws
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/

#pragma once
#include <aws/dynamodb/DynamoDBServiceClientModel.h>
#include <aws/dynamodb/DynamoDB_EXPORTS.h>
#include <aws/dynamodb/model/ScanRequest.h>
#include <aws/dynamodb/model/ScanResult.h>

namespace Aws {
namespace DynamoDB {
class DynamoDBClient;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

instead of forward declaring DynamoDB why not have ScanPaginationTraits take a template parameter template <typename Client = ClientType> like you have on Invoke then the entire class is tempalted. You already pass DynamoDBClient as a template parameter in DynamoDBClientPagination.h

namespace Pagination {

struct ScanPaginationTraits {
using RequestType = Model::ScanRequest;
using ResultType = Model::ScanResult;
using OutcomeType = Model::ScanOutcome;
using ClientType = DynamoDBClient;

template <typename Client = ClientType>
static OutcomeType Invoke(Client& client, const RequestType& request) {
return client.Scan(request);
}

static bool HasMoreResults(const ResultType& result) { return !result.GetLastEvaluatedKey().empty(); }

static void SetNextRequest(const ResultType& result, RequestType& request) { request.SetExclusiveStartKey(result.GetLastEvaluatedKey()); }
};

} // namespace Pagination
} // namespace DynamoDB
} // namespace Aws
5 changes: 4 additions & 1 deletion generated/src/aws-cpp-sdk-ec2/include/aws/ec2/EC2Client.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <aws/core/client/AWSClientAsyncCRTP.h>
#include <aws/core/client/ClientConfiguration.h>
#include <aws/core/utils/xml/XmlSerializer.h>
#include <aws/ec2/EC2PaginationBase.h>
#include <aws/ec2/EC2ServiceClientModel.h>
#include <aws/ec2/EC2_EXPORTS.h>

Expand All @@ -21,7 +22,9 @@ namespace EC2 {
* href="https://docs.aws.amazon.com/ec2/latest/devguide">Amazon EC2 Developer
* Guide</a>.</p>
*/
class AWS_EC2_API EC2Client : public Aws::Client::AWSXMLClient, public Aws::Client::ClientWithAsyncTemplateMethods<EC2Client> {
class AWS_EC2_API EC2Client : public Aws::Client::AWSXMLClient,
public Aws::Client::ClientWithAsyncTemplateMethods<EC2Client>,
public EC2PaginationBase<EC2Client> {
public:
typedef Aws::Client::AWSXMLClient BASECLASS;
static const char* GetServiceName();
Expand Down
Loading
Loading