Lesson 35 - Get Compute Auth Token Working

This commit is contained in:
Norman Lansing
2026-02-28 12:32:28 -05:00
parent 1d477ee42a
commit 4fde462bce
7743 changed files with 1397833 additions and 18 deletions

View File

@@ -0,0 +1,162 @@
#pragma once
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include <aws/crt/Types.h>
struct aws_endpoints_rule_engine;
struct aws_endpoints_request_context;
struct aws_endpoints_resolved_endpoint;
namespace Aws
{
namespace Crt
{
namespace Endpoints
{
/*
* Add parameter to the context.
* Only string and boolean values are supported.
* Adding parameter several times with the same name will overwrite
* previous values.
*/
class AWS_CRT_CPP_API RequestContext final
{
public:
RequestContext(Allocator *allocator = ApiAllocator()) noexcept;
~RequestContext();
/* TODO: move/copy semantics */
RequestContext(const RequestContext &) = delete;
RequestContext &operator=(const RequestContext &) = delete;
RequestContext(RequestContext &&) = delete;
RequestContext &operator=(RequestContext &&) = delete;
/**
* @return true if the instance is in a valid state, false otherwise.
*/
operator bool() const noexcept { return m_requestContext != nullptr; }
/*
* Add string parameter.
* True if added successfully and false if failed.
* Aws::Crt::LastError() can be used to retrieve failure error code.
*/
bool AddString(const ByteCursor &name, const ByteCursor &value);
/*
* Add boolean parameter.
* True if added successfully and false if failed.
* Aws::Crt::LastError() can be used to retrieve failure error code.
*/
bool AddBoolean(const ByteCursor &name, bool value);
/*
* Add string array parameter.
* True if added successfully and false if failed.
* Aws::Crt::LastError() can be used to retrieve failure error code.
*/
bool AddStringArray(const ByteCursor &name, const Vector<ByteCursor> &value);
/// @private
aws_endpoints_request_context *GetNativeHandle() const noexcept { return m_requestContext; }
private:
Allocator *m_allocator;
aws_endpoints_request_context *m_requestContext;
};
/*
* Outcome of Endpoint Resolution.
* Outcome can be either endpoint (IsEndpoint) or error (IsError).
* Endpoint outcome means that engine was able to resolve context to
* an endpoint and outcome can have the following fields defined:
* - Url (required) - resolved url
* - Headers (optional) - additional headers to be included with request
* - Properties (optional) - custom list of properties associated
* with request (json blob to be interpreted by the caller.)
*
* Error outcome means that context could not be resolved to an endpoint.
* Outcome will have following fields:
* - Error (required) - error message providing more info on why
* endpoint could not be resolved.
*/
class AWS_CRT_CPP_API ResolutionOutcome final
{
public:
~ResolutionOutcome();
/* TODO: move/copy semantics */
ResolutionOutcome(const ResolutionOutcome &) = delete;
ResolutionOutcome &operator=(const ResolutionOutcome &) = delete;
ResolutionOutcome(ResolutionOutcome &&toMove) noexcept;
ResolutionOutcome &operator=(ResolutionOutcome &&);
bool IsEndpoint() const noexcept;
bool IsError() const noexcept;
/*
* Endpoint properties.
* Note: following fields are none if outcome is error.
* Headers and Properties are optional and could also be None.
*/
Optional<StringView> GetUrl() const;
Optional<StringView> GetProperties() const;
Optional<UnorderedMap<StringView, Vector<StringView>>> GetHeaders() const;
/*
* Error properties.
* Note: following fields are none if outcome is error.
*/
Optional<StringView> GetError() const;
/**
* @return true if the instance is in a valid state, false otherwise.
*/
operator bool() const noexcept { return m_resolvedEndpoint != nullptr; }
/// @private For use by rule engine.
ResolutionOutcome(aws_endpoints_resolved_endpoint *impl);
private:
aws_endpoints_resolved_endpoint *m_resolvedEndpoint;
};
/**
* Endpoints Rule Engine.
*/
class AWS_CRT_CPP_API RuleEngine final
{
public:
RuleEngine(
const ByteCursor &rulesetCursor,
const ByteCursor &partitionsCursor,
Allocator *allocator = ApiAllocator()) noexcept;
~RuleEngine();
RuleEngine(const RuleEngine &) = delete;
RuleEngine &operator=(const RuleEngine &) = delete;
RuleEngine(RuleEngine &&) = delete;
RuleEngine &operator=(RuleEngine &&) = delete;
/**
* @return true if the instance is in a valid state, false otherwise.
*/
operator bool() const noexcept { return m_ruleEngine != nullptr; }
/*
* Resolves rules against the provided context.
* If successful return will have resolution outcome.
* If not, return will be none and Aws::Crt::LastError() can be
* used to retrieve CRT error code.
*/
Optional<ResolutionOutcome> Resolve(const RequestContext &context) const;
private:
aws_endpoints_rule_engine *m_ruleEngine;
};
} // namespace Endpoints
} // namespace Crt
} // namespace Aws