|  | // 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_ |