@@ -35,6 +35,7 @@ use tarpc::{
3535} ;
3636use tokio:: net:: TcpStream ;
3737use tracing_subscriber:: prelude:: * ;
38+ use tarpc:: context:: { ClientContext , ServerContext , SharedContext } ;
3839
3940pub mod add {
4041 #[ tarpc:: service]
@@ -124,7 +125,7 @@ where
124125}
125126
126127fn make_stub < Req , Resp , const N : usize > (
127- backends : [ impl Transport < ClientMessage < Arc < Req > > , Response < Resp > > + Send + Sync + ' static ; N ] ,
128+ backends : [ impl Transport < ClientMessage < ClientContext , Arc < Req > > , Response < Resp > > + Send + Sync + ' static ; N ] ,
128129) -> retry:: Retry <
129130 impl Fn ( & Result < Resp , RpcError > , u32 ) -> bool + Clone ,
130131 load_balance:: RoundRobin < client:: Channel < Arc < Req > , Resp > > ,
@@ -173,23 +174,28 @@ async fn main() -> anyhow::Result<()> {
173174 . serving ( AddServer . serve ( ) ) ;
174175 let add_server = add_listener1
175176 . chain ( add_listener2)
177+ . map ( |t| t. map_ok ( |msg : ClientMessage < SharedContext , _ > | msg. map_context ( |ctx| ServerContext :: new ( ctx) ) ) )
176178 . map ( BaseChannel :: with_defaults) ;
177179 tokio:: spawn ( spawn_incoming ( add_server. execute ( server) ) ) ;
178180
181+ let map_context = |msg : ClientMessage < ClientContext , _ > | future:: ok ( msg. map_context ( |ctx| ctx. shared_context ) ) ;
182+
179183 let add_client = add:: AddClient :: from ( make_stub ( [
180- tarpc:: serde_transport:: tcp:: connect ( addr1, Json :: default) . await ?,
181- tarpc:: serde_transport:: tcp:: connect ( addr2, Json :: default) . await ?,
184+ tarpc:: serde_transport:: tcp:: connect ( addr1, Json :: default) . await ?. with ( map_context ) ,
185+ tarpc:: serde_transport:: tcp:: connect ( addr2, Json :: default) . await ?. with ( map_context ) ,
182186 ] ) ) ;
183187
184188 let double_listener = tarpc:: serde_transport:: tcp:: listen ( "localhost:0" , Json :: default)
185189 . await ?
186- . filter_map ( |r| future:: ready ( r. ok ( ) ) ) ;
187- let addr = double_listener. get_ref ( ) . local_addr ( ) ;
190+ . filter_map ( |r| future:: ready ( r. ok ( ) ) )
191+ . map ( |t| t. map_ok ( |msg : ClientMessage < SharedContext , _ > | msg. map_context ( |ctx| ServerContext :: new ( ctx) ) ) ) ;
192+ let addr = double_listener. get_ref ( ) . get_ref ( ) . local_addr ( ) ;
188193 let double_server = double_listener. map ( BaseChannel :: with_defaults) . take ( 1 ) ;
189194 let server = DoubleServer { add_client } . serve ( ) ;
190195 tokio:: spawn ( spawn_incoming ( double_server. execute ( server) ) ) ;
191196
192197 let to_double_server = tarpc:: serde_transport:: tcp:: connect ( addr, Json :: default) . await ?;
198+ let to_double_server = to_double_server. with ( |msg : ClientMessage < ClientContext , _ > | future:: ok ( msg. map_context ( |ctx| ctx. shared_context ) ) ) ;
193199 let double_client =
194200 double:: DoubleClient :: new ( client:: Config :: default ( ) , to_double_server) . spawn ( ) ;
195201
0 commit comments