| // Copyright 2021 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef QUICHE_COMMON_PLATFORM_API_QUICHE_URL_UTILS_H_ | 
 | #define QUICHE_COMMON_PLATFORM_API_QUICHE_URL_UTILS_H_ | 
 |  | 
 | #include <string> | 
 |  | 
 | #include "absl/container/flat_hash_map.h" | 
 | #include "absl/container/flat_hash_set.h" | 
 | #include "absl/strings/string_view.h" | 
 | #include "absl/types/optional.h" | 
 | #include "quiche_platform_impl/quiche_url_utils_impl.h" | 
 |  | 
 | namespace quiche { | 
 |  | 
 | // Produces concrete URLs in |target| from templated ones in |uri_template|. | 
 | // Parameters are URL-encoded. Collects the names of any expanded variables in | 
 | // |vars_found|. Returns true if the template was parseable, false if it was | 
 | // malformed. | 
 | inline bool ExpandURITemplate( | 
 |     const std::string& uri_template, | 
 |     const absl::flat_hash_map<std::string, std::string>& parameters, | 
 |     std::string* target, | 
 |     absl::flat_hash_set<std::string>* vars_found = nullptr) { | 
 |   return ExpandURITemplateImpl(uri_template, parameters, target, vars_found); | 
 | } | 
 |  | 
 | // Decodes a URL-encoded string and converts it to ASCII. If the decoded input | 
 | // contains non-ASCII characters, decoding fails and absl::nullopt is returned. | 
 | inline absl::optional<std::string> AsciiUrlDecode(absl::string_view input) { | 
 |   return AsciiUrlDecodeImpl(input); | 
 | } | 
 |  | 
 | }  // namespace quiche | 
 |  | 
 | #endif  // QUICHE_COMMON_PLATFORM_API_QUICHE_URL_UTILS_H_ |