From 07861a9687449ec360299a90a0b824c0eeab0903 Mon Sep 17 00:00:00 2001 From: Ahson Khan Date: Fri, 9 Jul 2021 15:36:16 -0700 Subject: [PATCH] Avoid inheriting from an internal base class for KeyVault PagedResponse Options and expose fields directly (#2590) * Avoid inheriting from an internal base class for KeyVault PagedResponse Options and expose fields directly * fix for compilation Co-authored-by: Victor Vazquez --- .../CHANGELOG.md | 4 +- .../CMakeLists.txt | 1 - .../internal/get_page_results_options.hpp | 22 ------- .../azure/keyvault/keys/list_keys_result.hpp | 11 ++-- .../src/import_key_options.cpp | 1 - .../src/key_client.cpp | 58 ++++++++++++++++++- 6 files changed, 63 insertions(+), 34 deletions(-) delete mode 100644 sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/get_page_results_options.hpp diff --git a/sdk/keyvault/azure-security-keyvault-common/CHANGELOG.md b/sdk/keyvault/azure-security-keyvault-common/CHANGELOG.md index 0f8876d78..4bd754f03 100644 --- a/sdk/keyvault/azure-security-keyvault-common/CHANGELOG.md +++ b/sdk/keyvault/azure-security-keyvault-common/CHANGELOG.md @@ -1,11 +1,11 @@ # Release History -## 4.0.0 (2021-07-08) +## 4.0.0 (2021-07-09) ### Breaking Changes - Removed `SHA256`, `SHA384`, and `SHA512` hashing classes by making them internal since the end user doesn't need them. -- Renamed header `single_page.hpp` to `get_page_results_options.hpp`. +- Removed header `single_page.hpp`. ## 4.0.0-beta.3 (2021-06-08) diff --git a/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt b/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt index 0800e6a80..34e1e13a6 100644 --- a/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt +++ b/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt @@ -28,7 +28,6 @@ endif() set( AZURE_KEYVAULT_COMMON_HEADER - inc/azure/keyvault/common/internal/get_page_results_options.hpp inc/azure/keyvault/common/internal/keyvault_pipeline.hpp ) diff --git a/sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/get_page_results_options.hpp b/sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/get_page_results_options.hpp deleted file mode 100644 index 32929267f..000000000 --- a/sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/get_page_results_options.hpp +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// SPDX-License-Identifier: MIT - -/** - * @brief Define the base classes for using single page responses. - * - */ - -#pragma once - -#include - -#include - -namespace Azure { namespace Security { namespace KeyVault { namespace _internal { - struct GetPageResultOptions - { - virtual ~GetPageResultOptions() = default; - Azure::Nullable NextPageToken; - Azure::Nullable MaxPageResults; - }; -}}}} // namespace Azure::Security::KeyVault::_internal diff --git a/sdk/keyvault/azure-security-keyvault-keys/inc/azure/keyvault/keys/list_keys_result.hpp b/sdk/keyvault/azure-security-keyvault-keys/inc/azure/keyvault/keys/list_keys_result.hpp index d2b262644..201553ee8 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/inc/azure/keyvault/keys/list_keys_result.hpp +++ b/sdk/keyvault/azure-security-keyvault-keys/inc/azure/keyvault/keys/list_keys_result.hpp @@ -12,8 +12,6 @@ #include #include -#include - #include "azure/keyvault/keys/deleted_key.hpp" #include "azure/keyvault/keys/json_web_key.hpp" #include "azure/keyvault/keys/key_vault_key.hpp" @@ -125,8 +123,9 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Keys { * */ struct GetPropertiesOfKeysOptions final - : public Azure::Security::KeyVault::_internal::GetPageResultOptions { + Azure::Nullable NextPageToken; + Azure::Nullable MaxPageResults; }; /** @@ -134,8 +133,9 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Keys { * */ struct GetPropertiesOfKeyVersionsOptions final - : public Azure::Security::KeyVault::_internal::GetPageResultOptions { + Azure::Nullable NextPageToken; + Azure::Nullable MaxPageResults; }; /** @@ -143,7 +143,8 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Keys { * */ struct GetDeletedKeysOptions final - : public Azure::Security::KeyVault::_internal::GetPageResultOptions { + Azure::Nullable NextPageToken; + Azure::Nullable MaxPageResults; }; }}}} // namespace Azure::Security::KeyVault::Keys diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/import_key_options.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/import_key_options.cpp index a1557b8c0..4dfe133b9 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/import_key_options.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/import_key_options.cpp @@ -13,7 +13,6 @@ using namespace Azure::Security::KeyVault::Keys; using namespace Azure::Security::KeyVault::Keys::_detail; using namespace Azure::Core::Json::_internal; -using namespace Azure::Security::KeyVault::_internal; std::string Azure::Security::KeyVault::Keys::_detail::ImportKeyOptionsSerializer::ImportKeyOptionsSerialize( diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/key_client.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/key_client.cpp index 91b452d85..20791537b 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/key_client.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/key_client.cpp @@ -5,8 +5,6 @@ #include #include -#include - #include "azure/keyvault/keys/key_client.hpp" #include "private/key_backup.hpp" #include "private/key_constants.hpp" @@ -32,7 +30,61 @@ struct RequestWithContinuationToken final }; static inline RequestWithContinuationToken BuildRequestFromContinuationToken( - Azure::Security::KeyVault::_internal::GetPageResultOptions const& options, + Azure::Security::KeyVault::Keys::GetPropertiesOfKeysOptions const& options, + std::vector&& defaultPath) +{ + RequestWithContinuationToken request; + request.Path = defaultPath; + if (options.NextPageToken) + { + // Using a continuation token requires to send the request to the continuation token URL instead + // of the default URL which is used only for the first page. + Azure::Core::Url nextPageUrl(options.NextPageToken.Value()); + request.Query + = std::make_unique>(nextPageUrl.GetQueryParameters()); + request.Path.clear(); + request.Path.emplace_back(nextPageUrl.GetPath()); + } + if (options.MaxPageResults) + { + if (request.Query == nullptr) + { + request.Query = std::make_unique>(); + } + request.Query->emplace("maxResults", std::to_string(options.MaxPageResults.Value())); + } + return request; +} + +static inline RequestWithContinuationToken BuildRequestFromContinuationToken( + Azure::Security::KeyVault::Keys::GetPropertiesOfKeyVersionsOptions const& options, + std::vector&& defaultPath) +{ + RequestWithContinuationToken request; + request.Path = defaultPath; + if (options.NextPageToken) + { + // Using a continuation token requires to send the request to the continuation token URL instead + // of the default URL which is used only for the first page. + Azure::Core::Url nextPageUrl(options.NextPageToken.Value()); + request.Query + = std::make_unique>(nextPageUrl.GetQueryParameters()); + request.Path.clear(); + request.Path.emplace_back(nextPageUrl.GetPath()); + } + if (options.MaxPageResults) + { + if (request.Query == nullptr) + { + request.Query = std::make_unique>(); + } + request.Query->emplace("maxResults", std::to_string(options.MaxPageResults.Value())); + } + return request; +} + +static inline RequestWithContinuationToken BuildRequestFromContinuationToken( + Azure::Security::KeyVault::Keys::GetDeletedKeysOptions const& options, std::vector&& defaultPath) { RequestWithContinuationToken request;