/proc/self/cwd/envoy/http/query_params.h
Line | Count | Source (jump to first uncovered line) |
1 | | #pragma once |
2 | | |
3 | | #include <map> |
4 | | #include <string> |
5 | | #include <vector> |
6 | | |
7 | | #include "absl/container/btree_map.h" |
8 | | #include "absl/strings/string_view.h" |
9 | | #include "absl/types/optional.h" |
10 | | #include "header_map.h" |
11 | | |
12 | | namespace Envoy { |
13 | | namespace Http { |
14 | | namespace Utility { |
15 | | |
16 | | // TODO(jmarantz): this should probably be a proper class, with methods to serialize |
17 | | // using proper formatting. Perhaps similar to |
18 | | // https://github.com/apache/incubator-pagespeed-mod/blob/master/pagespeed/kernel/http/query_params.h |
19 | | |
20 | | using QueryParams = std::map<std::string, std::string>; |
21 | | using QueryParamsVector = std::vector<std::pair<std::string, std::string>>; |
22 | | |
23 | | class QueryParamsMulti { |
24 | | private: |
25 | | absl::btree_map<std::string, std::vector<std::string>> data_; |
26 | | |
27 | | public: |
28 | | void remove(absl::string_view key); |
29 | | void add(absl::string_view key, absl::string_view value); |
30 | | void overwrite(absl::string_view key, absl::string_view value); |
31 | | std::string toString(); |
32 | | std::string replaceQueryString(const HeaderString& path); |
33 | | absl::optional<std::string> getFirstValue(absl::string_view key) const; |
34 | | |
35 | 0 | const absl::btree_map<std::string, std::vector<std::string>>& data() { return data_; } |
36 | | |
37 | | static QueryParamsMulti parseParameters(absl::string_view data, size_t start, bool decode_params); |
38 | | static QueryParamsMulti parseQueryString(absl::string_view url); |
39 | | static QueryParamsMulti parseAndDecodeQueryString(absl::string_view url); |
40 | | }; |
41 | | |
42 | | } // namespace Utility |
43 | | } // namespace Http |
44 | | } // namespace Envoy |