11#include <unordered_map>
14#include <userver/utils/impl/internal_tag_fwd.hpp>
15#include <userver/utils/str_icase.hpp>
17USERVER_NAMESPACE_BEGIN
21struct DecomposedUrlView {
22 std::string_view scheme;
23 std::string_view host;
24 std::string_view path;
25 std::string_view query;
26 std::string_view fragment;
30[[deprecated(
"Use a more strict http::parser::UrlDecode instead")]] std::string UrlDecode(std::string_view range);
36std::string UrlEncode(std::string_view input_string);
45std::string UrlEncodePathSegment(std::string_view input_string);
53std::string EncodeS3Key(std::string_view key);
55using Args = std::unordered_map<std::string, std::string,
utils::
StrCaseHash>;
56using MultiArgs = std::multimap<std::string, std::string>;
57using PathArgs = std::unordered_map<std::string, std::string>;
63std::string MakeQuery(
const Args& query_args);
69std::string MakeQuery(
const MultiArgs& query_args);
75std::string MakeQuery(
const std::unordered_map<std::string, std::string>& query_args);
81std::string MakeQuery(std::initializer_list<std::pair<std::string_view, std::string_view>> query_args);
88std::string MakeUrl(std::string_view path,
const Args& query_args);
95std::string MakeUrl(std::string_view path,
const std::unordered_map<std::string, std::string>& query_args);
103std::string MakeUrl(std::string_view path,
const Args& query_args, MultiArgs query_multiargs);
111 std::string_view path,
112 std::initializer_list<std::pair<std::string_view, std::string_view>> query_args
120 std::string_view path,
121 const std::vector<std::pair<std::string_view, std::string_view>>& query_args
130std::optional<std::string> MakeUrlWithPathArgs(std::string_view path,
const PathArgs& path_args);
138std::optional<std::string> MakeUrlWithPathArgs(
139 std::string_view path,
140 const PathArgs& path_args,
141 const Args& query_args
150std::optional<std::string> MakeUrlWithPathArgs(
151 std::string_view path,
152 const PathArgs& path_args,
153 const std::unordered_map<std::string, std::string>& query_args
163std::optional<std::string> MakeUrlWithPathArgs(
164 std::string_view path,
165 const PathArgs& path_args,
166 const Args& query_args,
167 MultiArgs query_multiargs
176std::optional<std::string> MakeUrlWithPathArgs(
177 std::string_view path,
178 const PathArgs& path_args,
179 std::initializer_list<std::pair<std::string_view, std::string_view>> query_args
186std::string ExtractMetaTypeFromUrl(std::string_view url);
187std::string_view ExtractMetaTypeFromUrlView(std::string_view url);
194std::string ExtractPath(std::string_view url);
195std::string_view ExtractPathView(std::string_view url);
201std::string ExtractPathOnly(std::string_view url);
207std::string ExtractHostname(std::string_view url);
208std::string_view ExtractHostnameView(std::string_view url);
214std::string ExtractScheme(std::string_view url);
215std::string_view ExtractSchemeView(std::string_view url);
221std::string ExtractQuery(std::string_view url);
222std::string_view ExtractQueryView(std::string_view url);
228std::string ExtractFragment(std::string_view url);
229std::string_view ExtractFragmentView(std::string_view url);
233DecomposedUrlView DecomposeUrlIntoViews(std::string_view url);
237std::string UrlDecode(
utils::impl::InternalTag, std::string_view range);