http_proxy_client_async/flow/
handshake_outcome.rs1use crate::http::{HeaderMap, HeaderName, HeaderValue};
2use httparse::Response;
3
4#[derive(Debug)]
5pub struct ResponseParts {
6 pub status_code: u16,
7 pub reason_phrase: String,
8 pub headers: HeaderMap,
9}
10
11fn parts_from_complete_response<'headers, 'buf: 'headers>(
13 response: Response<'headers, 'buf>,
14) -> ResponseParts {
15 let status_code = response.code.unwrap();
16 let reason_phrase = response.reason.unwrap().to_string();
17 let mut headers = HeaderMap::new();
18 for header in response.headers {
19 headers.insert(
20 HeaderName::from_bytes(header.name.as_bytes()).unwrap(),
21 HeaderValue::from_bytes(header.value).unwrap(),
22 );
23 }
24 ResponseParts {
25 status_code,
26 reason_phrase,
27 headers,
28 }
29}
30
31#[derive(Debug)]
32pub struct HandshakeOutcome {
33 pub response_parts: ResponseParts,
34 pub data_after_handshake: Vec<u8>,
35}
36
37impl HandshakeOutcome {
38 pub(crate) fn new<'headers, 'buf: 'headers>(
39 response: Response<'headers, 'buf>,
40 data_after_handshake: Vec<u8>,
41 ) -> Self {
42 Self {
43 response_parts: parts_from_complete_response(response),
44 data_after_handshake,
45 }
46 }
47}