@@ -30,7 +30,8 @@ mod helpers;
3030mod manager;
3131mod utils;
3232
33- use crate :: client:: async_client:: helpers:: { process_subscription_close_response, InnerBatchResponse } ;
33+ use crate :: JsonRawValue ;
34+ use crate :: client:: async_client:: helpers:: { InnerBatchResponse , process_subscription_close_response} ;
3435use crate :: client:: async_client:: utils:: MaybePendingFutures ;
3536use crate :: client:: {
3637 BatchMessage , BatchResponse , ClientT , Error , ReceivedMessage , RegisterNotificationMessage , RequestMessage ,
@@ -40,31 +41,30 @@ use crate::error::RegisterMethodError;
4041use crate :: params:: { BatchRequestBuilder , EmptyBatchRequest } ;
4142use crate :: tracing:: client:: { rx_log_from_json, tx_log_from_str} ;
4243use crate :: traits:: ToRpcParams ;
43- use crate :: JsonRawValue ;
4444use std:: borrow:: Cow as StdCow ;
4545
4646use core:: time:: Duration ;
4747use helpers:: {
4848 build_unsubscribe_message, call_with_timeout, process_batch_response, process_notification,
4949 process_single_response, process_subscription_response, stop_subscription,
5050} ;
51- use jsonrpsee_types:: { InvalidRequestId , ResponseSuccess , TwoPointZero } ;
51+ use jsonrpsee_types:: { IdGeneratorFn , InvalidRequestId , ResponseSuccess , TwoPointZero } ;
5252use manager:: RequestManager ;
5353use std:: sync:: Arc ;
5454
5555use async_trait:: async_trait;
5656use futures_timer:: Delay ;
57+ use futures_util:: Stream ;
5758use futures_util:: future:: { self , Either } ;
5859use futures_util:: stream:: StreamExt ;
59- use futures_util:: Stream ;
6060use jsonrpsee_types:: response:: { ResponsePayload , SubscriptionError } ;
6161use jsonrpsee_types:: { NotificationSer , RequestSer , Response , SubscriptionResponse } ;
6262use serde:: de:: DeserializeOwned ;
6363use tokio:: sync:: { mpsc, oneshot} ;
6464use tracing:: instrument;
6565
6666use self :: utils:: { InactivityCheck , IntervalStream } ;
67- use super :: { generate_batch_id_range , subscription_channel , FrontToBack , IdKind , RequestIdManager } ;
67+ use super :: { FrontToBack , IdKind , RequestIdManager , generate_batch_id_range , subscription_channel } ;
6868
6969pub ( crate ) type Notification < ' a > = jsonrpsee_types:: Notification < ' a , Option < serde_json:: Value > > ;
7070
@@ -346,7 +346,7 @@ impl ClientBuilder {
346346 to_back : to_back. clone ( ) ,
347347 request_timeout : self . request_timeout ,
348348 error : ErrorFromBack :: new ( to_back, disconnect_reason) ,
349- id_manager : RequestIdManager :: new ( self . id_kind ) ,
349+ id_manager : RequestIdManager :: new ( self . id_kind , None ) ,
350350 max_log_length : self . max_log_length ,
351351 on_exit : Some ( client_dropped_tx) ,
352352 }
@@ -454,6 +454,11 @@ impl Client {
454454 pub fn request_timeout ( & self ) -> Duration {
455455 self . request_timeout
456456 }
457+
458+ /// Registers a custom request id generator
459+ pub fn with_request_id_generator ( & mut self , request_id_generator : IdGeneratorFn ) {
460+ self . id_manager . custom_id_generator = Some ( request_id_generator) ;
461+ }
457462}
458463
459464impl Drop for Client {
0 commit comments