SearchRequestComposer.cpp (1781B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #include "pch.h" 4 #include "SearchRequestComposer.h" 5 #include "Rest/Schema/1_0/Json/SearchRequestSerializer.h" 6 #include "Rest/Schema/1_1/Json/SearchRequestSerializer.h" 7 8 namespace AppInstaller::Repository::Rest::Schema 9 { 10 struct SearchRequestComposer::impl 11 { 12 // The serializer. We only have one lineage (1.0+) right now. 13 std::unique_ptr<Rest::Schema::V1_0::Json::SearchRequestSerializer> m_serializer; 14 }; 15 16 SearchRequestComposer::SearchRequestComposer(SearchRequestComposer&&) noexcept = default; 17 SearchRequestComposer& SearchRequestComposer::operator=(SearchRequestComposer&&) noexcept = default; 18 19 SearchRequestComposer::~SearchRequestComposer() = default; 20 21 SearchRequestComposer::SearchRequestComposer(const Utility::Version& schemaVersion) 22 { 23 const auto& parts = schemaVersion.GetParts(); 24 THROW_HR_IF(E_INVALIDARG, parts.empty()); 25 26 m_pImpl = std::make_unique<impl>(); 27 28 if (parts[0].Integer == 1) 29 { 30 if (parts.size() == 1 || parts[1].Integer == 0) 31 { 32 m_pImpl->m_serializer = std::make_unique<Rest::Schema::V1_0::Json::SearchRequestSerializer>(); 33 } 34 else 35 { 36 m_pImpl->m_serializer = std::make_unique<Rest::Schema::V1_1::Json::SearchRequestSerializer>(); 37 } 38 } 39 else 40 { 41 THROW_HR(HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE)); 42 } 43 } 44 45 web::json::value SearchRequestComposer::Serialize(const AppInstaller::Repository::SearchRequest& searchRequest) const 46 { 47 return m_pImpl->m_serializer->Serialize(searchRequest); 48 } 49 }