(alb: AlbTargetGroupRequest)
| 237 | |
| 238 | #[cfg(feature = "alb")] |
| 239 | fn into_alb_request(alb: AlbTargetGroupRequest) -> http::Request<Body> { |
| 240 | let http_method = alb.http_method; |
| 241 | let host = alb.headers.get(http::header::HOST).and_then(|s| s.to_str().ok()); |
| 242 | let raw_path = alb.path.unwrap_or_default(); |
| 243 | |
| 244 | let query_string_parameters = decode_query_map(alb.query_string_parameters); |
| 245 | let multi_value_query_string_parameters = decode_query_map(alb.multi_value_query_string_parameters); |
| 246 | |
| 247 | let builder = http::Request::builder() |
| 248 | .uri(build_request_uri( |
| 249 | &raw_path, |
| 250 | &alb.headers, |
| 251 | host, |
| 252 | Some((&multi_value_query_string_parameters, &query_string_parameters)), |
| 253 | )) |
| 254 | .extension(RawHttpPath(raw_path)) |
| 255 | // multi valued query string parameters are always a super |
| 256 | // set of singly valued query string parameters, |
| 257 | // when present, multi-valued query string parameters are preferred |
| 258 | .extension(QueryStringParameters( |
| 259 | if multi_value_query_string_parameters.is_empty() { |
| 260 | query_string_parameters |
| 261 | } else { |
| 262 | multi_value_query_string_parameters |
| 263 | }, |
| 264 | )) |
| 265 | .extension(RequestContext::Alb(alb.request_context)); |
| 266 | |
| 267 | // merge headers into multi_value_headers and make |
| 268 | // multi-value_headers our cannoncial source of request headers |
| 269 | let mut headers = alb.multi_value_headers; |
| 270 | headers.extend(alb.headers); |
| 271 | |
| 272 | let base64 = alb.is_base64_encoded; |
| 273 | |
| 274 | let mut req = builder |
| 275 | .body( |
| 276 | alb.body |
| 277 | .as_deref() |
| 278 | .map_or_else(Body::default, |b| Body::from_maybe_encoded(base64, b)), |
| 279 | ) |
| 280 | .expect("failed to build request"); |
| 281 | |
| 282 | // no builder method that sets headers in batch |
| 283 | let _ = std::mem::replace(req.headers_mut(), headers); |
| 284 | let _ = std::mem::replace(req.method_mut(), http_method); |
| 285 | |
| 286 | req |
| 287 | } |
| 288 | |
| 289 | #[cfg(any(feature = "alb", feature = "vpc_lattice"))] |
| 290 | fn decode_query_map(query_map: QueryMap) -> QueryMap { |
no test coverage detected