// Bridges V8 Inspector generated code with the std::string used by the Node // Compare to V8 counterpart - deps/v8/src/inspector/string-util.h #ifndef SRC_INSPECTOR_NODE_STRING_H_ #define SRC_INSPECTOR_NODE_STRING_H_ #include "util.h" #include "v8-inspector.h" #include #include #include namespace node { namespace inspector { namespace protocol { class Value; using String = std::string; using StringBuilder = std::ostringstream; using ProtocolMessage = std::string; namespace StringUtil { // NOLINTNEXTLINE(runtime/references) This is V8 API... inline void builderAppend(StringBuilder& builder, char c) { builder.put(c); } // NOLINTNEXTLINE(runtime/references) inline void builderAppend(StringBuilder& builder, const char* value, size_t length) { builder.write(value, length); } // NOLINTNEXTLINE(runtime/references) inline void builderAppend(StringBuilder& builder, const char* value) { builderAppend(builder, value, std::strlen(value)); } // NOLINTNEXTLINE(runtime/references) inline void builderAppend(StringBuilder& builder, const String& string) { builder << string; } // NOLINTNEXTLINE(runtime/references) inline void builderReserve(StringBuilder& builder, size_t) { // ostringstream does not have a counterpart } inline String substring(const String& string, size_t start, size_t count) { return string.substr(start, count); } inline String fromInteger(int n) { return std::to_string(n); } inline String builderToString(const StringBuilder& builder) { return builder.str(); } inline size_t find(const String& string, const char* substring) { return string.find(substring); } String fromDouble(double d); double toDouble(const char* buffer, size_t length, bool* ok); String StringViewToUtf8(v8_inspector::StringView view); // NOLINTNEXTLINE(runtime/references) void builderAppendQuotedString(StringBuilder& builder, const String&); std::unique_ptr parseJSON(const String&); std::unique_ptr parseJSON(v8_inspector::StringView view); std::unique_ptr parseMessage(const std::string& message, bool binary); ProtocolMessage jsonToMessage(String message); ProtocolMessage binaryToMessage(std::vector message); String fromUTF8(const uint8_t* data, size_t length); String fromUTF16(const uint16_t* data, size_t length); const uint8_t* CharactersUTF8(const String& s); size_t CharacterCount(const String& s); // Unimplemented. The generated code will fall back to CharactersUTF8(). inline uint8_t* CharactersLatin1(const String& s) { return nullptr; } inline const uint16_t* CharactersUTF16(const String& s) { return nullptr; } extern size_t kNotFound; } // namespace StringUtil // A read-only sequence of uninterpreted bytes with reference-counted storage. // Though the templates for generating the protocol bindings reference // this type, js_protocol.pdl doesn't have a field of type 'binary', so // therefore it's unnecessary to provide an implementation here. class Binary { public: const uint8_t* data() const { UNREACHABLE(); } size_t size() const { UNREACHABLE(); } String toBase64() const { UNREACHABLE(); } static Binary fromBase64(const String& base64, bool* success) { UNREACHABLE(); } static Binary fromSpan(const uint8_t* data, size_t size) { UNREACHABLE(); } }; } // namespace protocol } // namespace inspector } // namespace node #endif // SRC_INSPECTOR_NODE_STRING_H_