Line data Source code
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 : using QueryParamsVector = std::vector<std::pair<std::string, std::string>>; 17 : 18 : class QueryParamsMulti { 19 : private: 20 : absl::btree_map<std::string, std::vector<std::string>> data_; 21 : 22 : public: 23 : void remove(absl::string_view key); 24 : void add(absl::string_view key, absl::string_view value); 25 : void overwrite(absl::string_view key, absl::string_view value); 26 : std::string toString() const; 27 : std::string replaceQueryString(const HeaderString& path) const; 28 : absl::optional<std::string> getFirstValue(absl::string_view key) const; 29 : 30 98 : const absl::btree_map<std::string, std::vector<std::string>>& data() const { return data_; } 31 : 32 : static QueryParamsMulti parseParameters(absl::string_view data, size_t start, bool decode_params); 33 : static QueryParamsMulti parseQueryString(absl::string_view url); 34 : static QueryParamsMulti parseAndDecodeQueryString(absl::string_view url); 35 : }; 36 : 37 : } // namespace Utility 38 : } // namespace Http 39 : } // namespace Envoy