SearchResponseParser.cpp (1800B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #include "pch.h" 4 #include "SearchResponseParser.h" 5 #include "Rest/Schema/1_0/Json/SearchResponseDeserializer.h" 6 #include "Rest/Schema/1_4/Json/SearchResponseDeserializer.h" 7 8 namespace AppInstaller::Repository::Rest::Schema 9 { 10 struct SearchResponseParser::impl 11 { 12 // The deserializer. We only have one lineage (1.0+) right now. 13 std::unique_ptr<Rest::Schema::V1_0::Json::SearchResponseDeserializer> m_deserializer; 14 }; 15 16 SearchResponseParser::SearchResponseParser(SearchResponseParser&&) noexcept = default; 17 SearchResponseParser& SearchResponseParser::operator=(SearchResponseParser&&) noexcept = default; 18 19 SearchResponseParser::~SearchResponseParser() = default; 20 21 SearchResponseParser::SearchResponseParser(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 < 4) 31 { 32 m_pImpl->m_deserializer = std::make_unique<Rest::Schema::V1_0::Json::SearchResponseDeserializer>(); 33 } 34 else 35 { 36 m_pImpl->m_deserializer = std::make_unique<Rest::Schema::V1_4::Json::SearchResponseDeserializer>(); 37 } 38 } 39 else 40 { 41 THROW_HR(HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE)); 42 } 43 } 44 45 IRestClient::SearchResult SearchResponseParser::Deserialize(const web::json::value& searchResultJsonObject) const 46 { 47 return m_pImpl->m_deserializer->Deserialize(searchResultJsonObject); 48 } 49 }