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