Join upstream service with payload fut
This commit is contained in:
		
							parent
							
								
									fbe8baaee9
								
							
						
					
					
						commit
						b7e8d2e465
					
				
					 2 changed files with 24 additions and 12 deletions
				
			
		|  | @ -132,9 +132,9 @@ async fn main() -> Result<(), anyhow::Error> { | ||||||
|             .service(web::resource("/media/{path}").route(web::get().to(routes::media))) |             .service(web::resource("/media/{path}").route(web::get().to(routes::media))) | ||||||
|             .service( |             .service( | ||||||
|                 web::resource("/inbox") |                 web::resource("/inbox") | ||||||
|                     .wrap(DebugPayload(config.debug())) |  | ||||||
|                     .wrap(config.digest_middleware()) |                     .wrap(config.digest_middleware()) | ||||||
|                     .wrap(config.signature_middleware(state.requests(), actors.clone())) |                     .wrap(config.signature_middleware(state.requests(), actors.clone())) | ||||||
|  |                     .wrap(DebugPayload(config.debug())) | ||||||
|                     .route(web::post().to(inbox)), |                     .route(web::post().to(inbox)), | ||||||
|             ) |             ) | ||||||
|             .service(web::resource("/actor").route(web::get().to(actor))) |             .service(web::resource("/actor").route(web::get().to(actor))) | ||||||
|  |  | ||||||
|  | @ -5,10 +5,10 @@ use actix_web::{ | ||||||
| }; | }; | ||||||
| use bytes::BytesMut; | use bytes::BytesMut; | ||||||
| use futures::{ | use futures::{ | ||||||
|     future::{ok, LocalBoxFuture, Ready}, |     future::{ok, try_join, LocalBoxFuture, Ready}, | ||||||
|     stream::StreamExt, |     stream::StreamExt, | ||||||
| }; | }; | ||||||
| use log::info; | use log::{error, info}; | ||||||
| use std::task::{Context, Poll}; | use std::task::{Context, Poll}; | ||||||
| use tokio::sync::mpsc::channel; | use tokio::sync::mpsc::channel; | ||||||
| 
 | 
 | ||||||
|  | @ -75,24 +75,36 @@ where | ||||||
| 
 | 
 | ||||||
|             let fut = self.1.call(req); |             let fut = self.1.call(req); | ||||||
| 
 | 
 | ||||||
|             return Box::pin(async move { |             let payload_fut = async move { | ||||||
|                 let mut bytes = BytesMut::new(); |                 let mut bytes = BytesMut::new(); | ||||||
| 
 | 
 | ||||||
|                 while let Some(res) = pl.next().await { |                 while let Some(res) = pl.next().await { | ||||||
|                     let b = res.map_err(|_| DebugError)?; |                     let b = res.map_err(|e| { | ||||||
|  |                         error!("Payload error, {}", e); | ||||||
|  |                         DebugError | ||||||
|  |                     })?; | ||||||
|                     bytes.extend(b); |                     bytes.extend(b); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 info!("{}", String::from_utf8_lossy(bytes.as_ref())); |                 info!("{}", String::from_utf8_lossy(bytes.as_ref())); | ||||||
| 
 | 
 | ||||||
|                 tx.send(Ok(bytes.freeze())).await.map_err(|_| DebugError)?; |                 tx.send(Ok(bytes.freeze())).await.map_err(|e| { | ||||||
|  |                     error!("Error sending bytes, {}", e); | ||||||
|  |                     DebugError | ||||||
|  |                 })?; | ||||||
| 
 | 
 | ||||||
|                 fut.await |                 Ok(()) as Result<(), actix_web::Error> | ||||||
|             }); |             }; | ||||||
|  | 
 | ||||||
|  |             Box::pin(async move { | ||||||
|  |                 let (res, _) = try_join(fut, payload_fut).await?; | ||||||
|  | 
 | ||||||
|  |                 Ok(res) | ||||||
|  |             }) | ||||||
|  |         } else { | ||||||
|  |             let fut = self.1.call(req); | ||||||
|  | 
 | ||||||
|  |             Box::pin(async move { fut.await }) | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         let fut = self.1.call(req); |  | ||||||
| 
 |  | ||||||
|         Box::pin(async move { fut.await }) |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue