LLDB mainline
lldb_private::JSONTransport< Req, Resp, Evt > Class Template Referenceabstract

A JSONTransport will encode and decode messages using JSON. More...

#include <JSONTransport.h>

Inheritance diagram for lldb_private::JSONTransport< Req, Resp, Evt >:
[legend]

Public Types

using MessageHandler = typename Transport<Req, Resp, Evt>::MessageHandler
Public Types inherited from lldb_private::Transport< Req, Resp, Evt >
using Message = std::variant<Req, Resp, Evt>
using MessageHandlerSP = std::shared_ptr<MessageHandler>

Public Member Functions

 JSONTransport (lldb::IOObjectSP in, lldb::IOObjectSP out)
llvm::Error Send (const Evt &evt) override
 Sends an event, a message that does not require a response.
llvm::Error Send (const Req &req) override
 Sends a request, a message that expects a response.
llvm::Error Send (const Resp &resp) override
 Sends a response to a specific request.
llvm::Expected< MainLoop::ReadHandleUPRegisterMessageHandler (MainLoop &loop, MessageHandler &handler) override
 RegisterMessageHandler registers the Transport with the given MainLoop and handles any incoming messages using the given MessageHandler.
llvm::Error Write (const llvm::json::Value &message)
Public Member Functions inherited from lldb_private::Transport< Req, Resp, Evt >
virtual ~Transport ()=default
template<typename... Ts>
auto Logv (const char *Fmt, Ts &&...Vals)
virtual void Log (llvm::StringRef message)=0

Static Public Attributes

static constexpr size_t kReadBufferSize = 1024
 Public for testing purposes, otherwise this should be an implementation detail.

Protected Member Functions

virtual llvm::Expected< std::vector< std::string > > Parse ()=0
virtual std::string Encode (const llvm::json::Value &message)=0

Protected Attributes

llvm::SmallString< kReadBufferSizem_buffer

Private Member Functions

void OnRead (MainLoopBase &loop, MessageHandler &handler)

Private Attributes

lldb::IOObjectSP m_in
lldb::IOObjectSP m_out

Detailed Description

template<typename Req, typename Resp, typename Evt>
class lldb_private::JSONTransport< Req, Resp, Evt >

A JSONTransport will encode and decode messages using JSON.

Definition at line 113 of file JSONTransport.h.

Member Typedef Documentation

◆ MessageHandler

template<typename Req, typename Resp, typename Evt>
using lldb_private::JSONTransport< Req, Resp, Evt >::MessageHandler = typename Transport<Req, Resp, Evt>::MessageHandler

Definition at line 116 of file JSONTransport.h.

Constructor & Destructor Documentation

◆ JSONTransport()

template<typename Req, typename Resp, typename Evt>
lldb_private::JSONTransport< Req, Resp, Evt >::JSONTransport ( lldb::IOObjectSP in,
lldb::IOObjectSP out )
inline

Definition at line 118 of file JSONTransport.h.

References m_in, and m_out.

Member Function Documentation

◆ Encode()

template<typename Req, typename Resp, typename Evt>
virtual std::string lldb_private::JSONTransport< Req, Resp, Evt >::Encode ( const llvm::json::Value & message)
protectedpure virtual

◆ OnRead()

template<typename Req, typename Resp, typename Evt>
void lldb_private::JSONTransport< Req, Resp, Evt >::OnRead ( MainLoopBase & loop,
MessageHandler & handler )
inlineprivate

Definition at line 158 of file JSONTransport.h.

References error(), kReadBufferSize, m_buffer, m_in, and Parse().

Referenced by RegisterMessageHandler().

◆ Parse()

template<typename Req, typename Resp, typename Evt>
virtual llvm::Expected< std::vector< std::string > > lldb_private::JSONTransport< Req, Resp, Evt >::Parse ( )
protectedpure virtual

◆ RegisterMessageHandler()

template<typename Req, typename Resp, typename Evt>
llvm::Expected< MainLoop::ReadHandleUP > lldb_private::JSONTransport< Req, Resp, Evt >::RegisterMessageHandler ( MainLoop & loop,
MessageHandler & handler )
inlineoverridevirtual

RegisterMessageHandler registers the Transport with the given MainLoop and handles any incoming messages using the given MessageHandler.

If an unexpected error occurs, the MainLoop will be terminated and a log message will include additional information about the termination reason.

Implements lldb_private::Transport< Req, Resp, Evt >.

Definition at line 126 of file JSONTransport.h.

References lldb_private::Status::Fail(), m_in, OnRead(), lldb_private::MainLoopPosix::RegisterReadObject(), and lldb_private::Status::takeError().

◆ Send() [1/3]

template<typename Req, typename Resp, typename Evt>
llvm::Error lldb_private::JSONTransport< Req, Resp, Evt >::Send ( const Evt & )
inlineoverridevirtual

Sends an event, a message that does not require a response.

Implements lldb_private::Transport< Req, Resp, Evt >.

Definition at line 121 of file JSONTransport.h.

References Write().

◆ Send() [2/3]

template<typename Req, typename Resp, typename Evt>
llvm::Error lldb_private::JSONTransport< Req, Resp, Evt >::Send ( const Req & )
inlineoverridevirtual

Sends a request, a message that expects a response.

Implements lldb_private::Transport< Req, Resp, Evt >.

Definition at line 122 of file JSONTransport.h.

References Write().

◆ Send() [3/3]

template<typename Req, typename Resp, typename Evt>
llvm::Error lldb_private::JSONTransport< Req, Resp, Evt >::Send ( const Resp & )
inlineoverridevirtual

Sends a response to a specific request.

Implements lldb_private::Transport< Req, Resp, Evt >.

Definition at line 123 of file JSONTransport.h.

References Write().

◆ Write()

template<typename Req, typename Resp, typename Evt>
llvm::Error lldb_private::JSONTransport< Req, Resp, Evt >::Write ( const llvm::json::Value & message)
inline

Definition at line 144 of file JSONTransport.h.

References Encode(), lldb_private::Transport< Req, Resp, Evt >::Logv(), and m_out.

Referenced by Send(), Send(), and Send().

Member Data Documentation

◆ kReadBufferSize

template<typename Req, typename Resp, typename Evt>
size_t lldb_private::JSONTransport< Req, Resp, Evt >::kReadBufferSize = 1024
staticconstexpr

Public for testing purposes, otherwise this should be an implementation detail.

Definition at line 141 of file JSONTransport.h.

Referenced by OnRead().

◆ m_buffer

template<typename Req, typename Resp, typename Evt>
llvm::SmallString<kReadBufferSize> lldb_private::JSONTransport< Req, Resp, Evt >::m_buffer
protected

◆ m_in

template<typename Req, typename Resp, typename Evt>
lldb::IOObjectSP lldb_private::JSONTransport< Req, Resp, Evt >::m_in
private

Definition at line 200 of file JSONTransport.h.

Referenced by JSONTransport(), OnRead(), and RegisterMessageHandler().

◆ m_out

template<typename Req, typename Resp, typename Evt>
lldb::IOObjectSP lldb_private::JSONTransport< Req, Resp, Evt >::m_out
private

Definition at line 201 of file JSONTransport.h.

Referenced by JSONTransport(), and Write().


The documentation for this class was generated from the following file: