summaryrefslogtreecommitdiff
path: root/tools/inspector_protocol/lib/base_string_adapter_h.template
diff options
context:
space:
mode:
Diffstat (limited to 'tools/inspector_protocol/lib/base_string_adapter_h.template')
-rw-r--r--tools/inspector_protocol/lib/base_string_adapter_h.template150
1 files changed, 150 insertions, 0 deletions
diff --git a/tools/inspector_protocol/lib/base_string_adapter_h.template b/tools/inspector_protocol/lib/base_string_adapter_h.template
new file mode 100644
index 0000000000..b0215e0745
--- /dev/null
+++ b/tools/inspector_protocol/lib/base_string_adapter_h.template
@@ -0,0 +1,150 @@
+// This file is generated by Parser_h.template.
+
+// Copyright 2019 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 {{"_".join(config.protocol.namespace)}}_BASE_STRING_ADAPTER_H
+#define {{"_".join(config.protocol.namespace)}}_BASE_STRING_ADAPTER_H
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/logging.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted_memory.h"
+#include "base/strings/string_number_conversions.h"
+{% if config.lib.export_header %}
+#include "{{config.lib.export_header}}"
+{% endif %}
+
+namespace base {
+class Value;
+}
+
+{% for namespace in config.protocol.namespace %}
+namespace {{namespace}} {
+{% endfor %}
+
+class Value;
+
+using String = std::string;
+using ProtocolMessage = std::string;
+
+class {{config.lib.export_macro}} StringUTF8Adapter {
+ public:
+ StringUTF8Adapter(const std::string& string) : string_(string) { }
+ const char* Data() const { return string_.data(); }
+ size_t length() const { return string_.length(); }
+
+ private:
+ const std::string& string_;
+};
+
+class {{config.lib.export_macro}} StringBuilder {
+ public:
+ StringBuilder();
+ ~StringBuilder();
+ void append(const String&);
+ void append(char);
+ void append(const char*, size_t);
+ String toString();
+ void reserveCapacity(size_t);
+
+ private:
+ std::string string_;
+};
+
+class {{config.lib.export_macro}} StringUtil {
+ public:
+ static String substring(const String& s, unsigned pos, unsigned len) {
+ return s.substr(pos, len);
+ }
+ static String fromInteger(int number) { return base::NumberToString(number); }
+ static String fromDouble(double number) {
+ String s = base::NumberToString(number);
+ if (!s.empty()) { // .123 -> 0.123; -.123 -> -0.123 for valid JSON.
+ if (s[0] == '.')
+ s.insert(/*index=*/ 0, /*count=*/ 1, /*ch=*/ '0');
+ else if (s[0] == '-' && s.size() >= 2 && s[1] == '.')
+ s.insert(/*index=*/ 1, /*count=*/ 1, /*ch=*/ '0');
+ }
+ return s;
+ }
+ static double toDouble(const char* s, size_t len, bool* ok) {
+ double v = 0.0;
+ *ok = base::StringToDouble(std::string(s, len), &v);
+ return *ok ? v : 0.0;
+ }
+ static size_t find(const String& s, const char* needle) {
+ return s.find(needle);
+ }
+ static size_t find(const String& s, const String& needle) {
+ return s.find(needle);
+ }
+ static const size_t kNotFound = static_cast<size_t>(-1);
+ static void builderAppend(StringBuilder& builder, const String& s) {
+ builder.append(s);
+ }
+ static void builderAppend(StringBuilder& builder, char c) {
+ builder.append(c);
+ }
+ static void builderAppend(StringBuilder& builder, const char* s, size_t len) {
+ builder.append(s, len);
+ }
+ static void builderAppendQuotedString(StringBuilder& builder,
+ const String& str);
+ static void builderReserve(StringBuilder& builder, unsigned capacity) {
+ builder.reserveCapacity(capacity);
+ }
+ static String builderToString(StringBuilder& builder) {
+ return builder.toString();
+ }
+
+ static std::unique_ptr<Value> parseMessage(const std::string& message, bool binary);
+ static ProtocolMessage jsonToMessage(String message);
+ static ProtocolMessage binaryToMessage(std::vector<uint8_t> message);
+
+ static String fromUTF8(const uint8_t* data, size_t length) {
+ return std::string(reinterpret_cast<const char*>(data), length);
+ }
+};
+
+// A read-only sequence of uninterpreted bytes with reference-counted storage.
+class {{config.lib.export_macro}} Binary {
+ public:
+ Binary(const Binary&);
+ Binary();
+ ~Binary();
+
+ const uint8_t* data() const { return bytes_->front(); }
+ size_t size() const { return bytes_->size(); }
+ scoped_refptr<base::RefCountedMemory> bytes() const { return bytes_; }
+
+ String toBase64() const;
+
+ static Binary fromBase64(const String& base64, bool* success);
+ static Binary fromRefCounted(scoped_refptr<base::RefCountedMemory> memory);
+ static Binary fromVector(std::vector<uint8_t> data);
+ static Binary fromString(std::string data);
+ static Binary fromSpan(const uint8_t* data, size_t size);
+
+ private:
+ explicit Binary(scoped_refptr<base::RefCountedMemory> bytes);
+ scoped_refptr<base::RefCountedMemory> bytes_;
+};
+
+std::unique_ptr<Value> toProtocolValue(const base::Value* value, int depth);
+std::unique_ptr<base::Value> toBaseValue(Value* value, int depth);
+
+bool AppendStringValueToMapBinary(base::StringPiece in,
+ base::StringPiece key, base::StringPiece value, std::string* out);
+bool AppendStringValueToMapJSON(base::StringPiece in,
+ base::StringPiece key, base::StringPiece value, std::string* out);
+
+{% for namespace in config.protocol.namespace %}
+} // namespace {{namespace}}
+{% endfor %}
+
+#endif // !defined({{"_".join(config.protocol.namespace)}}_BASE_STRING_ADAPTER_H)