#error This file may only be included from folly/Uri.h
#endif
+#include <functional>
+#include <tuple>
+
#include <folly/Conv.h>
+#include <folly/Hash.h>
namespace folly {
+namespace uri_detail {
+
+using UriTuple = std::tuple<
+ const fbstring&,
+ const fbstring&,
+ const fbstring&,
+ const fbstring&,
+ uint16_t,
+ const fbstring&,
+ const fbstring&,
+ const fbstring&>;
+
+inline UriTuple as_tuple(const folly::Uri& k) {
+ return UriTuple(
+ k.scheme(),
+ k.username(),
+ k.password(),
+ k.host(),
+ k.port(),
+ k.path(),
+ k.query(),
+ k.fragment());
+}
+
+} // namespace uri_detail
+
template <class String>
String Uri::toString() const {
String str;
return str;
}
-} // namespace folly
+} // namespace folly
+
+namespace std {
+
+template <>
+struct hash<folly::Uri> {
+ std::size_t operator()(const folly::Uri& k) const {
+ return std::hash<folly::uri_detail::UriTuple>{}(
+ folly::uri_detail::as_tuple(k));
+ }
+};
+
+template <>
+struct equal_to<folly::Uri> {
+ bool operator()(const folly::Uri& a, const folly::Uri& b) const {
+ return folly::uri_detail::as_tuple(a) == folly::uri_detail::as_tuple(b);
+ }
+};
+
+} // namespace std