| // Copyright 2017 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 NET_HTTP2_PLATFORM_IMPL_HTTP2_STRING_UTILS_IMPL_H_ | |
| #define NET_HTTP2_PLATFORM_IMPL_HTTP2_STRING_UTILS_IMPL_H_ | |
| #include <sstream> | |
| #include <utility> | |
| #include "base/strings/string_number_conversions.h" | |
| #include "base/strings/string_util.h" | |
| #include "base/strings/stringprintf.h" | |
| #include "net/base/escape.h" | |
| #include "net/base/hex_utils.h" | |
| #include "net/third_party/quiche/src/http2/platform/api/http2_export.h" | |
| #include "net/third_party/quiche/src/http2/platform/api/http2_string.h" | |
| #include "net/third_party/quiche/src/http2/platform/api/http2_string_piece.h" | |
| namespace http2 { | |
| template <typename... Args> | |
| inline Http2String Http2StrCatImpl(const Args&... args) { | |
| std::ostringstream oss; | |
| int dummy[] = {1, (oss << args, 0)...}; | |
| static_cast<void>(dummy); | |
| return oss.str(); | |
| } | |
| template <typename... Args> | |
| inline void Http2StrAppendImpl(Http2String* output, Args... args) { | |
| output->append(Http2StrCatImpl(args...)); | |
| } | |
| template <typename... Args> | |
| inline Http2String Http2StringPrintfImpl(const Args&... args) { | |
| return base::StringPrintf(std::forward<const Args&>(args)...); | |
| } | |
| inline Http2String Http2HexEncodeImpl(const void* bytes, size_t size) { | |
| return base::HexEncode(bytes, size); | |
| } | |
| inline Http2String Http2HexDecodeImpl(Http2StringPiece data) { | |
| return net::HexDecode(data); | |
| } | |
| inline Http2String Http2HexDumpImpl(Http2StringPiece data) { | |
| return net::HexDump(data); | |
| } | |
| inline Http2String Http2HexEscapeImpl(Http2StringPiece data) { | |
| return net::EscapeQueryParamValue(data, false); | |
| } | |
| template <typename Number> | |
| inline Http2String Http2HexImpl(Number number) { | |
| std::stringstream str; | |
| str << std::hex << number; | |
| return str.str(); | |
| } | |
| } // namespace http2 | |
| #endif // NET_HTTP2_PLATFORM_IMPL_HTTP2_STRING_UTILS_IMPL_H_ |