ethos_bitcoind/transport/
rpc_client.rs1use std::fmt;
2use std::result::Result;
3use std::sync::Arc;
4
5use crate::transport::core::{TransportError, TransportTrait};
6use crate::transport::DefaultTransport;
7
8pub struct RpcClient {
10 transport: Arc<dyn TransportTrait>,
11}
12
13impl fmt::Debug for RpcClient {
14 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
15 f.debug_struct("RpcClient").field("transport", &"<dyn TransportTrait>").finish()
16 }
17}
18
19impl RpcClient {
20 pub fn from_transport(inner: Arc<dyn TransportTrait>) -> Self { Self { transport: inner } }
22
23 pub fn new(socket_path: &str) -> Self {
25 let transport = DefaultTransport::new(socket_path, None);
26 Self { transport: Arc::new(transport) }
27 }
28
29 pub async fn call_method(
31 &self,
32 method: &str,
33 params: &[serde_json::Value],
34 ) -> Result<serde_json::Value, TransportError> {
35 self.transport.send_request(method, params).await
36 }
37}