blob: 2aa7ceba20340f8a3298fd792f07b9f0b969a3a1 [file] [log] [blame] [edit]
// 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 <optional>
#include <string>
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
#include "absl/strings/string_view.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 std::nullopt is returned.
inline std::optional<std::string> AsciiUrlDecode(absl::string_view input) {
return AsciiUrlDecodeImpl(input);
}
} // namespace quiche
#endif // QUICHE_COMMON_PLATFORM_API_QUICHE_URL_UTILS_H_