winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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 }