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///
@@ -44,49 +44,48 @@ impl Auth {
4444 Auth :: None => Ok ( ( None , None ) ) ,
4545 Auth :: UserPass ( u, p) => Ok ( ( Some ( u) , Some ( p) ) ) ,
4646 Auth :: CookieFile ( path) => {
47- let line = BufReader :: new ( File :: open ( path) ?)
48- . lines ( )
49- . next ( )
50- . ok_or ( Error :: InvalidCookieFile ) ??;
47+ let line = BufReader :: new ( File :: open ( path) ?) . lines ( ) . next ( ) . ok_or (
48+ Error :: InvalidCookieFile ,
49+ ) ??;
5150 let colon = line. find ( ':' ) . ok_or ( Error :: InvalidCookieFile ) ?;
5251 Ok ( ( Some ( line[ ..colon] . into ( ) ) , Some ( line[ colon + 1 ..] . into ( ) ) ) )
5352 }
5453 }
5554 }
5655}
5756
58- /// Defines a `jsonrpc::Client` using `bitreq`.
57+ /// Defines a async `jsonrpc::Client` using `bitreq`.
5958#[ macro_export]
60- macro_rules! define_jsonrpc_bitreq_client {
59+ macro_rules! define_jsonrpc_bitreq_async_client {
6160 ( $version: literal) => {
6261 use std:: fmt;
62+ use $crate:: client_async:: { log_response, Auth , Result } ;
63+ use $crate:: client_async:: error:: Error ;
6364
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.
65+ /// Client implements an async JSON-RPC client for the Bitcoin Core daemon or compatible APIs.
6866 pub struct Client {
69- inner: jsonrpc:: client :: Client ,
67+ inner: jsonrpc:: AsyncClient ,
7068 }
7169
7270 impl fmt:: Debug for Client {
7371 fn fmt( & self , f: & mut fmt:: Formatter ) -> core:: fmt:: Result {
7472 write!(
7573 f,
76- "corepc_client::client_sync::{}::Client({:?})" , $version, self . inner
74+ "corepc_client::client_async::{}::Client({})" ,
75+ $version, self . url
7776 )
7877 }
7978 }
8079
8180 impl Client {
8281 /// Creates a client to a bitcoind JSON-RPC server without authentication.
8382 pub fn new( url: & str ) -> Self {
84- let transport = jsonrpc:: http :: bitreq_http :: Builder :: new( )
83+ let transport = jsonrpc:: bitreq_http_async :: Builder :: new( )
8584 . url( url)
8685 . expect( "jsonrpc v0.19, this function does not error" )
8786 . timeout( std:: time:: Duration :: from_secs( 60 ) )
8887 . build( ) ;
89- let inner = jsonrpc:: client :: Client :: with_transport( transport) ;
88+ let inner = jsonrpc:: AsyncClient :: with_transport( transport) ;
9089
9190 Self { inner }
9291 }
@@ -97,20 +96,19 @@ macro_rules! define_jsonrpc_bitreq_client {
9796 return Err ( Error :: MissingUserPassword ) ;
9897 }
9998 let ( user, pass) = auth. get_user_pass( ) ?;
100-
101- let transport = jsonrpc:: http:: bitreq_http:: Builder :: new( )
99+ let transport = jsonrpc:: bitreq_http_async:: Builder :: new( )
102100 . url( url)
103101 . expect( "jsonrpc v0.19, this function does not error" )
104102 . timeout( std:: time:: Duration :: from_secs( 60 ) )
105103 . basic_auth( user. unwrap( ) , pass)
106104 . build( ) ;
107- let inner = jsonrpc:: client :: Client :: with_transport( transport) ;
105+ let inner = jsonrpc:: AsyncClient :: with_transport( transport) ;
108106
109107 Ok ( Self { inner } )
110108 }
111109
112110 /// Call an RPC `method` with given `args` list.
113- pub fn call<T : for <' a> serde:: de:: Deserialize <' a>>(
111+ pub async fn call<T : for <' a> serde:: de:: Deserialize <' a>>(
114112 & self ,
115113 method: & str ,
116114 args: & [ serde_json:: Value ] ,
@@ -121,7 +119,7 @@ macro_rules! define_jsonrpc_bitreq_client {
121119 log:: debug!( target: "corepc" , "request: {} {}" , method, serde_json:: Value :: from( args) ) ;
122120 }
123121
124- let resp = self . inner. send_request( req) . map_err( Error :: from) ;
122+ let resp = self . inner. send_request( req) . await . map_err( Error :: from) ;
125123 log_response( method, & resp) ;
126124 Ok ( resp?. result( ) ?)
127125 }
@@ -138,14 +136,14 @@ macro_rules! define_jsonrpc_bitreq_client {
138136///
139137/// - `$expected_versions`: An vector of expected server versions e.g., `[230100, 230200]`.
140138#[ macro_export]
141- macro_rules! impl_client_check_expected_server_version {
139+ macro_rules! impl_async_client_check_expected_server_version {
142140 ( $expected_versions: expr) => {
143141 impl Client {
144142 /// 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( ) ?;
143+ pub async fn check_expected_server_version( & self ) -> Result <( ) > {
144+ let server_version = self . server_version( ) . await ?;
147145 if !$expected_versions. contains( & server_version) {
148- return Err ( $crate:: client_sync :: error:: UnexpectedServerVersionError {
146+ return Err ( $crate:: client_async :: error:: UnexpectedServerVersionError {
149147 got: server_version,
150148 expected: $expected_versions. to_vec( ) ,
151149 } ) ?;
0 commit comments