11// SPDX-License-Identifier: CC0-1.0
22
3- //! JSON-RPC clients for testing against specific versions of Bitcoin Core.
3+ //! Async JSON-RPC clients for specific versions of Bitcoin Core.
44
55mod error;
66pub mod v17;
@@ -22,7 +22,7 @@ use std::fs::File;
2222use std:: io:: { BufRead , BufReader } ;
2323use std:: path:: PathBuf ;
2424
25- pub use crate :: client_sync :: error:: Error ;
25+ pub use crate :: client_async :: error:: Error ;
2626
2727/// Crate-specific Result type.
2828///
@@ -55,38 +55,38 @@ impl Auth {
5555 }
5656}
5757
58- /// Defines a `jsonrpc::Client` using `bitreq`.
58+ /// Defines a async `jsonrpc::Client` using `bitreq`.
5959#[ macro_export]
60- macro_rules! define_jsonrpc_bitreq_client {
60+ macro_rules! define_jsonrpc_bitreq_async_client {
6161 ( $version: literal) => {
6262 use std:: fmt;
63+ use $crate:: client_async:: { log_response, Auth , Result } ;
64+ use $crate:: client_async:: error:: Error ;
6365
64- use $crate:: client_sync:: { log_response, Auth , Result } ;
65- use $crate:: client_sync:: error:: Error ;
66-
67- /// Client implements a JSON-RPC client for the Bitcoin Core daemon or compatible APIs.
66+ /// Client implements an async JSON-RPC client for the Bitcoin Core daemon or compatible APIs.
6867 pub struct Client {
69- inner: jsonrpc:: client :: Client ,
68+ inner: jsonrpc:: AsyncClient ,
7069 }
7170
7271 impl fmt:: Debug for Client {
7372 fn fmt( & self , f: & mut fmt:: Formatter ) -> core:: fmt:: Result {
7473 write!(
7574 f,
76- "corepc_client::client_sync::{}::Client({:?})" , $version, self . inner
75+ "corepc_client::client_async::{}::Client({:?})" ,
76+ $version, self . inner
7777 )
7878 }
7979 }
8080
8181 impl Client {
8282 /// Creates a client to a bitcoind JSON-RPC server without authentication.
8383 pub fn new( url: & str ) -> Self {
84- let transport = jsonrpc:: http :: bitreq_http :: Builder :: new( )
84+ let transport = jsonrpc:: bitreq_http_async :: Builder :: new( )
8585 . url( url)
8686 . expect( "jsonrpc v0.19, this function does not error" )
8787 . timeout( std:: time:: Duration :: from_secs( 60 ) )
8888 . build( ) ;
89- let inner = jsonrpc:: client :: Client :: with_transport( transport) ;
89+ let inner = jsonrpc:: AsyncClient :: with_transport( transport) ;
9090
9191 Self { inner }
9292 }
@@ -97,20 +97,19 @@ macro_rules! define_jsonrpc_bitreq_client {
9797 return Err ( Error :: MissingUserPassword ) ;
9898 }
9999 let ( user, pass) = auth. get_user_pass( ) ?;
100-
101- let transport = jsonrpc:: http:: bitreq_http:: Builder :: new( )
100+ let transport = jsonrpc:: bitreq_http_async:: Builder :: new( )
102101 . url( url)
103102 . expect( "jsonrpc v0.19, this function does not error" )
104103 . timeout( std:: time:: Duration :: from_secs( 60 ) )
105104 . basic_auth( user. unwrap( ) , pass)
106105 . build( ) ;
107- let inner = jsonrpc:: client :: Client :: with_transport( transport) ;
106+ let inner = jsonrpc:: AsyncClient :: with_transport( transport) ;
108107
109108 Ok ( Self { inner } )
110109 }
111110
112111 /// Call an RPC `method` with given `args` list.
113- pub fn call<T : for <' a> serde:: de:: Deserialize <' a>>(
112+ pub async fn call<T : for <' a> serde:: de:: Deserialize <' a>>(
114113 & self ,
115114 method: & str ,
116115 args: & [ serde_json:: Value ] ,
@@ -121,7 +120,7 @@ macro_rules! define_jsonrpc_bitreq_client {
121120 log:: debug!( target: "corepc" , "request: {} {}" , method, serde_json:: Value :: from( args) ) ;
122121 }
123122
124- let resp = self . inner. send_request( req) . map_err( Error :: from) ;
123+ let resp = self . inner. send_request( req) . await . map_err( Error :: from) ;
125124 log_response( method, & resp) ;
126125 Ok ( resp?. result( ) ?)
127126 }
@@ -138,14 +137,14 @@ macro_rules! define_jsonrpc_bitreq_client {
138137///
139138/// - `$expected_versions`: An vector of expected server versions e.g., `[230100, 230200]`.
140139#[ macro_export]
141- macro_rules! impl_client_check_expected_server_version {
140+ macro_rules! impl_async_client_check_expected_server_version {
142141 ( $expected_versions: expr) => {
143142 impl Client {
144143 /// Checks that the JSON-RPC endpoint is for a `bitcoind` instance with the expected version.
145- pub fn check_expected_server_version( & self ) -> Result <( ) > {
146- let server_version = self . server_version( ) ?;
144+ pub async fn check_expected_server_version( & self ) -> Result <( ) > {
145+ let server_version = self . server_version( ) . await ?;
147146 if !$expected_versions. contains( & server_version) {
148- return Err ( $crate:: client_sync :: error:: UnexpectedServerVersionError {
147+ return Err ( $crate:: client_async :: error:: UnexpectedServerVersionError {
149148 got: server_version,
150149 expected: $expected_versions. to_vec( ) ,
151150 } ) ?;
0 commit comments