[Lldb-commits] [lldb] [lldb] Move Transport class into lldb_private (NFC) (PR #143806)
John Harrison via lldb-commits
lldb-commits at lists.llvm.org
Wed Jun 11 19:05:48 PDT 2025
================
@@ -0,0 +1,131 @@
+//===-- JSONTransport.h ---------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Transport layer for encoding and decoding JSON protocol messages.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_HOST_JSONTRANSPORT_H
+#define LLDB_HOST_JSONTRANSPORT_H
+
+#include "lldb/lldb-forward.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/FormatVariadic.h"
+#include "llvm/Support/JSON.h"
+#include <chrono>
+#include <system_error>
+
+namespace lldb_private {
+
+class TransportEOFError : public llvm::ErrorInfo<TransportEOFError> {
+public:
+ static char ID;
+
+ TransportEOFError() = default;
+
+ void log(llvm::raw_ostream &OS) const override {
+ OS << "transport end of file reached";
+ }
+ std::error_code convertToErrorCode() const override {
+ return llvm::inconvertibleErrorCode();
+ }
+};
+
+class TransportTimeoutError : public llvm::ErrorInfo<TransportTimeoutError> {
+public:
+ static char ID;
+
+ TransportTimeoutError() = default;
+
+ void log(llvm::raw_ostream &OS) const override {
+ OS << "transport operation timed out";
+ }
+ std::error_code convertToErrorCode() const override {
+ return std::make_error_code(std::errc::timed_out);
+ }
+};
+
+class TransportClosedError : public llvm::ErrorInfo<TransportClosedError> {
+public:
+ static char ID;
+
+ TransportClosedError() = default;
+
+ void log(llvm::raw_ostream &OS) const override {
+ OS << "transport is closed";
+ }
+ std::error_code convertToErrorCode() const override {
+ return llvm::inconvertibleErrorCode();
+ }
+};
+
+/// A transport class that uses JSON for communication.
+class JSONTransport {
+public:
+ JSONTransport(llvm::StringRef client_name, lldb::IOObjectSP input,
+ lldb::IOObjectSP output);
+ virtual ~JSONTransport() = default;
+
+ /// Transport is not copyable.
+ /// @{
+ JSONTransport(const JSONTransport &rhs) = delete;
+ void operator=(const JSONTransport &rhs) = delete;
+ /// @}
+
+ /// Writes a message to the output stream.
+ template <typename T> llvm::Error Write(const T &t) {
+ const std::string message = llvm::formatv("{0}", toJSON(t)).str();
+ return WriteImpl(message);
+ }
+
+ /// Reads the next message from the input stream.
+ template <typename T>
+ llvm::Expected<T> Read(const std::chrono::microseconds &timeout) {
+ llvm::Expected<std::string> message = ReadImpl(timeout);
+ if (!message)
+ return message.takeError();
+ return llvm::json::parse<T>(/*JSON=*/*message,
+ /*RootName=*/"transport_message");
----------------
ashgti wrote:
Seems reasonable, we can always add it later if we want it for error reporting.
https://github.com/llvm/llvm-project/pull/143806
More information about the lldb-commits
mailing list