|
43 | 43 | for (k, v) in headers { |
44 | 44 | builder = builder.header(k, v); |
45 | 45 | } |
46 | | - let body = request.body.clone(); |
47 | | - let mut body = body.write_wait_until(|b| b.is_finished()).block_on(); |
48 | 46 |
|
49 | | - // TODO: actually use the trailers |
50 | | - let _trailers = body.trailers.clone(); |
| 47 | + let future_response = Resource::new(FutureIncomingResponse::default()); |
| 48 | + let future_response_clone = future_response.clone(); |
| 49 | + async move { |
| 50 | + let body = request.body.clone(); |
| 51 | + let mut body = body.write_wait_until(|b| b.is_finished()).await; |
51 | 52 |
|
52 | | - // TODO: use a streaming body instead of reading it all at once |
53 | | - let body = body.read_all().block_on(); |
| 53 | + // TODO: actually use the trailers |
| 54 | + let _trailers = body.trailers.clone(); |
54 | 55 |
|
55 | | - let builder = builder.body(body); |
| 56 | + // TODO: use a streaming body instead of reading it all at once |
| 57 | + let body = body.read_all().await; |
56 | 58 |
|
57 | | - let future_response = Resource::new(FutureIncomingResponse::default()); |
58 | | - let future_response_clone = future_response.clone(); |
| 59 | + let builder = builder.body(body); |
59 | 60 |
|
60 | | - async move { |
61 | | - let response = builder.send().block_on(); |
| 61 | + let response = builder.send().await; |
62 | 62 |
|
63 | 63 | let response = match response { |
64 | 64 | Ok(resp) => resp, |
65 | 65 | Err(err) => { |
66 | 66 | future_response_clone |
67 | 67 | .write() |
68 | | - .block_on() |
| 68 | + .await |
69 | 69 | .set(Err(ErrorCode::InternalError(Some(err.to_string())))); |
70 | 70 | return; |
71 | 71 | } |
|
80 | 80 | Err(err) => { |
81 | 81 | future_response_clone |
82 | 82 | .write() |
83 | | - .block_on() |
| 83 | + .await |
84 | 84 | .set(Err(ErrorCode::InternalError(Some(err.to_string())))); |
85 | 85 | return; |
86 | 86 | } |
87 | 87 | }; |
88 | 88 |
|
89 | 89 | let mut stream = Stream::new(); |
90 | 90 | let _ = stream.write(bytes); |
| 91 | + let _ = stream.close(); |
91 | 92 | let body = IncomingBody { |
92 | 93 | stream: Resource::new(stream), |
93 | 94 | trailers: Resource::default(), |
|
103 | 104 |
|
104 | 105 | future_response_clone |
105 | 106 | .write() |
106 | | - .block_on() |
| 107 | + .await |
107 | 108 | .set(Ok(Resource::new(response))); |
108 | 109 | } |
109 | 110 | .spawn(); |
|
0 commit comments