3#include <spdlog/spdlog.h>
11 asio::any_io_executor executor,
const std::string& socket_path,
12 bool is_server, std::shared_ptr<spdlog::logger> logger)
13 :
PipeTransport(std::move(executor), socket_path, is_server, logger) {
17 -> asio::awaitable<std::expected<void, error::RpcError>> {
23 -> asio::awaitable<std::expected<std::string, error::RpcError>> {
26 auto result = framer_.TryDeframe(read_buffer_);
27 if (result.complete) {
28 read_buffer_.erase(0, result.consumed_bytes);
29 co_return result.message;
32 if (!result.error.empty()) {
33 Logger()->error(
"Framing error: {}", result.error);
35 RpcErrorCode::kTransportError,
"Framing error: " + result.error);
41 co_return chunk_result;
44 read_buffer_ += *chunk_result;
static auto UnexpectedFromCode(RpcErrorCode code, std::string message="") -> std::unexpected< RpcError >
auto ReceiveMessage() -> asio::awaitable< std::expected< std::string, error::RpcError > > override
auto SendMessage(std::string message) -> asio::awaitable< std::expected< void, error::RpcError > > override
FramedPipeTransport(asio::any_io_executor executor, const std::string &socket_path, bool is_server, std::shared_ptr< spdlog::logger > logger=nullptr)
static auto Frame(const std::string &message, const std::string &content_type="application/vscode-jsonrpc; charset=utf-8") -> std::string
auto SendMessage(std::string message) -> asio::awaitable< std::expected< void, error::RpcError > > override
auto ReceiveMessage() -> asio::awaitable< std::expected< std::string, error::RpcError > > override