use jsonrpsee::core::async_trait; use jsonrpsee::core::client::{ReceivedMessage, TransportReceiverT, TransportSenderT}; use std::sync::Arc; use tokio::io::{AsyncBufRead, AsyncBufReadExt, AsyncWriteExt}; use tokio::sync::Mutex; pub struct Adapter(pub Arc>); #[async_trait] impl TransportSenderT for Adapter { type Error = tokio::io::Error; #[tracing::instrument(skip(self), level = "trace")] async fn send(&mut self, msg: String) -> Result<(), Self::Error> { let mut guard = self.0.lock().await; guard.write_all(msg.as_bytes()).await?; guard.write_all(b"\n").await?; Ok(()) } } #[async_trait] impl TransportReceiverT for Adapter { type Error = tokio::io::Error; #[tracing::instrument(skip(self), level = "trace")] async fn receive(&mut self) -> Result { let mut str = String::new(); self.0.lock().await.read_line(&mut str).await?; Ok(ReceivedMessage::Text(str)) } }