@@ -31,7 +31,7 @@ static Expected<std::string>
3131ReadFull (IOObject &descriptor, size_t length,
3232 std::optional<std::chrono::microseconds> timeout = std::nullopt ) {
3333 if (!descriptor.IsValid ())
34- return llvm::make_error<TransportClosedError >();
34+ return llvm::make_error<TransportInvalidError >();
3535
3636 bool timeout_supported = true ;
3737 // FIXME: SelectHelper does not work with NativeFile on Win32.
@@ -92,7 +92,7 @@ void JSONTransport::Log(llvm::StringRef message) {
9292Expected<std::string>
9393HTTPDelimitedJSONTransport::ReadImpl (const std::chrono::microseconds &timeout) {
9494 if (!m_input || !m_input->IsValid ())
95- return createStringError ( " transport output is closed " );
95+ return llvm::make_error<TransportInvalidError>( );
9696
9797 IOObject *input = m_input.get ();
9898 Expected<std::string> message_header =
@@ -131,7 +131,7 @@ HTTPDelimitedJSONTransport::ReadImpl(const std::chrono::microseconds &timeout) {
131131
132132Error HTTPDelimitedJSONTransport::WriteImpl (const std::string &message) {
133133 if (!m_output || !m_output->IsValid ())
134- return llvm::make_error<TransportClosedError >();
134+ return llvm::make_error<TransportInvalidError >();
135135
136136 Log (llvm::formatv (" <-- {0}" , message).str ());
137137
@@ -142,6 +142,35 @@ Error HTTPDelimitedJSONTransport::WriteImpl(const std::string &message) {
142142 return m_output->Write (Output.data (), num_bytes).takeError ();
143143}
144144
145+ Expected<std::string>
146+ JSONRPCTransport::ReadImpl (const std::chrono::microseconds &timeout) {
147+ if (!m_input || !m_input->IsValid ())
148+ return make_error<TransportInvalidError>();
149+
150+ IOObject *input = m_input.get ();
151+ Expected<std::string> raw_json =
152+ ReadUntil (*input, kMessageSeparator , timeout);
153+ if (!raw_json)
154+ return raw_json.takeError ();
155+
156+ Log (llvm::formatv (" --> {0}" , *raw_json).str ());
157+
158+ return *raw_json;
159+ }
160+
161+ Error JSONRPCTransport::WriteImpl (const std::string &message) {
162+ if (!m_output || !m_output->IsValid ())
163+ return llvm::make_error<TransportInvalidError>();
164+
165+ Log (llvm::formatv (" <-- {0}" , message).str ());
166+
167+ std::string Output;
168+ llvm::raw_string_ostream OS (Output);
169+ OS << message << kMessageSeparator ;
170+ size_t num_bytes = Output.size ();
171+ return m_output->Write (Output.data (), num_bytes).takeError ();
172+ }
173+
145174char TransportEOFError::ID;
146175char TransportTimeoutError::ID;
147- char TransportClosedError ::ID;
176+ char TransportInvalidError ::ID;
0 commit comments