http_proxy_client_async/flow/
handshake_outcome.rs

1use 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
11/// Panics if response is not complete.
12fn 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}