diff --git a/sdk/core/azure-core/inc/azure/core/exception.hpp b/sdk/core/azure-core/inc/azure/core/exception.hpp index a599f3e8b..d56f45096 100644 --- a/sdk/core/azure-core/inc/azure/core/exception.hpp +++ b/sdk/core/azure-core/inc/azure/core/exception.hpp @@ -92,5 +92,28 @@ namespace Azure { namespace Core { explicit RequestFailedException( const std::string& message, std::unique_ptr rawResponse); + + /** + * @brief Constructs a new `RequestFailedException` by copying from an existing one. + * @note Copies the #Azure::Core::Http::RawResponse into the new `RequestFailedException`. + * + * @param other The `RequestFailedException` to be copied. + */ + RequestFailedException(const RequestFailedException& other) + : std::runtime_error(other.Message), StatusCode(other.StatusCode), + ReasonPhrase(other.ReasonPhrase), ClientRequestId(other.ClientRequestId), + RequestId(other.RequestId), ErrorCode(other.ErrorCode), Message(other.Message), + RawResponse(std::make_unique(*other.RawResponse)) + { + } + + /** + * @brief Constructs a new `RequestFailedException`. + * @note Transfers ownership of the #Azure::Core::Http::RawResponse to the new + * `RequestFailedException`. + * + * @param other An rvalue reference for moving the `RequestFailedException`. + */ + RequestFailedException(RequestFailedException&& other) = default; }; }} // namespace Azure::Core diff --git a/sdk/core/azure-core/inc/azure/core/http/raw_response.hpp b/sdk/core/azure-core/inc/azure/core/http/raw_response.hpp index 73a4f6ecf..5f351851a 100644 --- a/sdk/core/azure-core/inc/azure/core/http/raw_response.hpp +++ b/sdk/core/azure-core/inc/azure/core/http/raw_response.hpp @@ -76,10 +76,19 @@ namespace Azure { namespace Core { namespace Http { response.m_statusCode, response.m_reasonPhrase) { + AZURE_ASSERT(m_bodyStream == nullptr); // Copy body m_body = response.GetBody(); } + /** + * @brief Constructs a new `RawResponse`. + * @note Transfers ownership of the `RawResponse` to the new `RawResponse`. + * + * @param response An rvalue reference for moving the raw response. + */ + RawResponse(RawResponse&& response) = default; + // ===== Methods used to build HTTP response ===== /**