Skip to content

Commit cbfc678

Browse files
committed
Create class based on bound out BDD endpoint engine in crt
1 parent 62a645d commit cbfc678

8 files changed

Lines changed: 605 additions & 305 deletions

File tree

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0.
4+
*/
5+
6+
7+
#pragma once
8+
9+
#include <aws/core/endpoint/internal/CrtEndpointProvider.h>
10+
11+
#include <aws/crt/endpoints/BddEngine.h>
12+
13+
namespace Aws
14+
{
15+
namespace Endpoint
16+
{
17+
static const char BDD_ENDPOINT_PROVIDER_TAG[] = "Aws::Endpoint::BDDEndpointProvider";
18+
19+
/**
20+
* Resolves an endpoint using the compiled-bytecode CRT BDD engine.
21+
*/
22+
AWS_CORE_API ResolveEndpointOutcome
23+
ResolveEndpointBddImpl(const Aws::Crt::Endpoints::BddEngine& bddEngine,
24+
const EndpointParameters& builtInParameters,
25+
const EndpointParameters& clientContextParameters,
26+
const EndpointParameters& endpointParameters);
27+
28+
/**
29+
* BDD endpoint provider template. Resolves endpoints from compiled BDD bytecode via the
30+
* CRT Aws::Crt::Endpoints::BddEngine rather than a JSON ruleset. Drop-in replacement for
31+
* DefaultEndpointProvider with improved performance.
32+
*/
33+
template<typename ClientConfigurationT = Aws::Client::GenericClientConfiguration,
34+
typename BuiltInParametersT = Aws::Endpoint::BuiltInParameters,
35+
typename ClientContextParametersT = Aws::Endpoint::ClientContextParameters>
36+
class AWS_CORE_API BDDEndpointProvider : public CrtEndpointProvider<Aws::Crt::Endpoints::BddEngine,
37+
ResolveEndpointBddImpl, ClientConfigurationT, BuiltInParametersT, ClientContextParametersT>
38+
{
39+
public:
40+
using CrtEndpointProvider<Aws::Crt::Endpoints::BddEngine, ResolveEndpointBddImpl,
41+
ClientConfigurationT, BuiltInParametersT, ClientContextParametersT>::CrtEndpointProvider;
42+
43+
virtual ~BDDEndpointProvider() = default;
44+
};
45+
46+
/**
47+
* Export endpoint provider symbols for Windows DLL, otherwise declare as extern
48+
*/
49+
AWS_CORE_EXTERN template class AWS_CORE_API BDDEndpointProvider<Aws::Client::GenericClientConfiguration,
50+
Aws::Endpoint::BuiltInParameters,
51+
Aws::Endpoint::ClientContextParameters>;
52+
} // namespace Endpoint
53+
} // namespace Aws

src/aws-cpp-sdk-core/include/aws/core/endpoint/DefaultEndpointProvider.h

Lines changed: 8 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,10 @@
66

77
#pragma once
88

9-
#include <aws/core/endpoint/AWSPartitions.h>
10-
#include <aws/core/endpoint/EndpointProviderBase.h>
11-
#include <aws/core/endpoint/EndpointParameter.h>
12-
#include <aws/core/endpoint/ClientContextParameters.h>
13-
#include <aws/core/endpoint/BuiltInParameters.h>
14-
#include <aws/core/utils/memory/stl/AWSArray.h>
9+
#include <aws/core/endpoint/internal/CrtEndpointProvider.h>
1510

1611
#include <aws/crt/endpoints/RuleEngine.h>
1712

18-
#include <aws/core/utils/Outcome.h>
19-
#include <aws/core/client/AWSError.h>
20-
#include <aws/core/client/CoreErrors.h>
21-
#include "aws/core/utils/logging/LogMacros.h"
22-
2313
namespace Aws
2414
{
2515
namespace Endpoint
@@ -33,6 +23,7 @@ namespace Aws
3323
* @param clientContextParameters
3424
* @param endpointParameters
3525
* @return
26+
* Resolves an endpoint using the JSON-ruleset CRT rule engine.
3627
*/
3728
AWS_CORE_API ResolveEndpointOutcome
3829
ResolveEndpointDefaultImpl(const Aws::Crt::Endpoints::RuleEngine& ruleEngine,
@@ -41,78 +32,19 @@ namespace Aws
4132
const EndpointParameters& endpointParameters);
4233

4334
/**
44-
* Default endpoint provider template used in this SDK.
35+
* Resolves endpoints from a JSON ruleset blob via the CRT Aws::Crt::Endpoints::RuleEngine.
4536
*/
4637
template<typename ClientConfigurationT = Aws::Client::GenericClientConfiguration,
4738
typename BuiltInParametersT = Aws::Endpoint::BuiltInParameters,
4839
typename ClientContextParametersT = Aws::Endpoint::ClientContextParameters>
49-
class AWS_CORE_API DefaultEndpointProvider : public EndpointProviderBase<ClientConfigurationT, BuiltInParametersT, ClientContextParametersT>
40+
class AWS_CORE_API DefaultEndpointProvider : public CrtEndpointProvider<Aws::Crt::Endpoints::RuleEngine,
41+
ResolveEndpointDefaultImpl, ClientConfigurationT, BuiltInParametersT, ClientContextParametersT>
5042
{
5143
public:
52-
DefaultEndpointProvider(const char* endpointRulesBlob, const size_t endpointRulesBlobSz)
53-
: m_crtRuleEngine(Aws::Crt::ByteCursorFromArray((const uint8_t*) endpointRulesBlob, endpointRulesBlobSz),
54-
Aws::Crt::ByteCursorFromArray((const uint8_t*) AWSPartitions::GetPartitionsBlob(), AWSPartitions::PartitionsBlobSize))
55-
{
56-
if(!m_crtRuleEngine) {
57-
AWS_LOGSTREAM_FATAL(DEFAULT_ENDPOINT_PROVIDER_TAG, "Invalid CRT Rule Engine state");
58-
}
59-
}
60-
61-
virtual ~DefaultEndpointProvider()
62-
{
63-
}
64-
65-
void InitBuiltInParameters(const ClientConfigurationT& config) override
66-
{
67-
m_builtInParameters.SetFromClientConfiguration(config);
68-
}
69-
70-
void InitBuiltInParameters(const ClientConfigurationT& config, const Aws::String& serviceName) override
71-
{
72-
m_builtInParameters.SetFromClientConfiguration(config, serviceName);
73-
}
74-
75-
/**
76-
* Default implementation of the ResolveEndpoint
77-
*/
78-
ResolveEndpointOutcome ResolveEndpoint(const EndpointParameters& endpointParameters) const override
79-
{
80-
auto ResolveEndpointDefaultImpl = Aws::Endpoint::ResolveEndpointDefaultImpl;
81-
return ResolveEndpointDefaultImpl(m_crtRuleEngine, m_builtInParameters.GetAllParameters(), m_clientContextParameters.GetAllParameters(), endpointParameters);
82-
};
83-
84-
const ClientContextParametersT& GetClientContextParameters() const override
85-
{
86-
return m_clientContextParameters;
87-
}
88-
ClientContextParametersT& AccessClientContextParameters() override
89-
{
90-
return m_clientContextParameters;
91-
}
92-
93-
const BuiltInParametersT& GetBuiltInParameters() const
94-
{
95-
return m_builtInParameters;
96-
}
97-
BuiltInParametersT& AccessBuiltInParameters()
98-
{
99-
return m_builtInParameters;
100-
}
101-
102-
void OverrideEndpoint(const Aws::String& endpoint) override
103-
{
104-
m_builtInParameters.OverrideEndpoint(endpoint);
105-
}
106-
107-
protected:
108-
/* Crt RuleEngine evaluator built using the service's Rule engine */
109-
Aws::Crt::Endpoints::RuleEngine m_crtRuleEngine;
110-
111-
/* Also known as a configurable parameters defined by the AWS Service in their c2j/smithy model definition */
112-
ClientContextParametersT m_clientContextParameters;
44+
using CrtEndpointProvider<Aws::Crt::Endpoints::RuleEngine, ResolveEndpointDefaultImpl,
45+
ClientConfigurationT, BuiltInParametersT, ClientContextParametersT>::CrtEndpointProvider;
11346

114-
/* Also known as parameters on the ClientConfiguration in this SDK */
115-
BuiltInParametersT m_builtInParameters;
47+
virtual ~DefaultEndpointProvider() = default;
11648
};
11749

11850
/**

0 commit comments

Comments
 (0)