winget-cli

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

Rest.cpp (2024B)


      1 // Copyright (c) Microsoft Corporation.
      2 // Licensed under the MIT License.
      3 #include "pch.h"
      4 #include "AppInstallerStrings.h"
      5 #include "winget/Rest.h"
      6 #include <winget/JsonUtil.h>
      7 
      8 namespace AppInstaller::Rest
      9 {
     10     utility::string_t GetRestAPIBaseUri(std::string uri)
     11     {
     12         // Trim
     13         if (!uri.empty())
     14         {
     15             uri = AppInstaller::Utility::Trim(uri);
     16 
     17             // Remove trailing forward slash
     18             if (uri.back() == '/')
     19             {
     20                 uri.pop_back();
     21             }
     22         }
     23 
     24         // Encode the Uri
     25         return web::uri::encode_uri(JSON::GetUtilityString(uri));
     26     }
     27 
     28     bool IsValidUri(const utility::string_t& restApiUri)
     29     {
     30         return web::uri::validate(restApiUri);
     31     }
     32 
     33     utility::string_t AppendPathToUri(const utility::string_t& restApiUri, const utility::string_t& path)
     34     {
     35         web::uri_builder builder(restApiUri);
     36         builder.append_path(path, true);
     37         return builder.to_string();
     38     }
     39 
     40     utility::string_t MakeQueryParam(std::string_view queryName, const std::string& queryValue)
     41     {
     42         std::string queryParam;
     43         queryParam.append(queryName).append("=").append(queryValue);
     44 
     45         return utility::conversions::to_string_t(queryParam);
     46     }
     47 
     48     utility::string_t AppendQueryParamsToUri(const utility::string_t& uri, const std::map<std::string_view, std::string>& queryParameters)
     49     {
     50         web::http::uri_builder builder{ uri };
     51 
     52         for (auto& pair : queryParameters)
     53         {
     54             builder.append_query(MakeQueryParam(pair.first, pair.second), true);
     55         }
     56 
     57         return builder.to_string();
     58     }
     59 
     60     std::vector<std::string> GetUniqueItems(const std::vector<std::string>& list)
     61     {
     62         std::set<std::string> set;
     63         for (const auto& item : list)
     64         {
     65             set.emplace(item);
     66         }
     67 
     68         std::vector<std::string> result{ set.begin(), set.end() };
     69         return result;
     70     }
     71 }