| 99 | } |
| 100 | |
| 101 | async fn http_echo_trailers(request: Request<Body>) -> Result<Response<Body>> { |
| 102 | let collected = request.into_body().into_boxed_body().collect().await?; |
| 103 | let trailers = collected.trailers().cloned().unwrap_or_else(|| { |
| 104 | let mut trailers = HeaderMap::new(); |
| 105 | trailers.insert("x-no-trailers", "1".parse().unwrap()); |
| 106 | trailers |
| 107 | }); |
| 108 | |
| 109 | let body = StreamBody::new(once_future(async move { |
| 110 | anyhow::Ok(Frame::<Bytes>::trailers(trailers)) |
| 111 | })); |
| 112 | Ok(Response::new(Body::from_http_body(body))) |
| 113 | } |
| 114 | |
| 115 | async fn http_response_status(request: Request<Body>) -> Result<Response<Body>> { |
| 116 | let status = if let Some(header_val) = request.headers().get("x-response-status") { |