bitcoin_node_query/
client.rs

1use bitcoind_request::{
2    client::Client as BitcoindRequestClient, client::Request as BitcoindRequestRequest,
3};
4use jsonrpc::{serde_json::value::RawValue, simple_http, Response as JsonRPCResponse};
5
6pub struct Client {
7    pub bitcoind_request_client: BitcoindRequestClient,
8}
9
10pub struct Request<'a>(BitcoindRequestRequest<'a>);
11
12impl<'a> Request<'a> {}
13
14impl Client {
15    // TODO: Add error handling if this fails
16    pub fn new(url: &str, user: &str, pass: &str) -> Result<Self, simple_http::Error> {
17        let bitcoind_request_client =
18            BitcoindRequestClient::new(url, user, pass).expect("failed to create client");
19        let client = Client {
20            bitcoind_request_client,
21        };
22        Ok(client)
23    }
24    pub fn build_request<'a>(
25        &self,
26        command: &'a str,
27        params: &'a Vec<Box<RawValue>>,
28    ) -> Request<'a> {
29        let bitcoind_request: BitcoindRequestRequest =
30            self.bitcoind_request_client.build_request(command, &params);
31        let request = Request(bitcoind_request);
32        request
33    }
34    pub fn send_request(&self, request: Request) -> Result<JsonRPCResponse, jsonrpc::Error> {
35        let response = self.bitcoind_request_client.send_request(request.0);
36        response
37    }
38}