http_proxy_client_async/
lib.rs1#![warn(missing_debug_implementations, rust_2018_idioms)]
2
3pub mod flow;
4pub mod http;
5pub mod prepend_io_stream;
6
7use futures_io::{AsyncRead, AsyncWrite};
8
9pub use crate::http::*;
10pub use flow::{HandshakeOutcome, ResponseParts};
11pub use prepend_io_stream::PrependIoStream as Stream;
12pub use std::io::Result;
13
14pub async fn handshake_and_wrap<ARW>(
15 mut stream: ARW,
16 host: &str,
17 port: u16,
18 request_headers: &HeaderMap,
19 read_buf: &mut [u8],
20) -> Result<Outcome<Stream<ARW>>>
21where
22 ARW: AsyncRead + AsyncWrite + Unpin,
23{
24 let HandshakeOutcome {
25 response_parts,
26 data_after_handshake,
27 } = flow::handshake(&mut stream, host, port, request_headers, read_buf).await?;
28
29 Ok(Outcome {
30 response_parts,
31 stream: Stream::from_vec(stream, Some(data_after_handshake.into())),
32 })
33}
34
35#[derive(Debug)]
36pub struct Outcome<T> {
37 pub response_parts: ResponseParts,
38 pub stream: T,
39}
40
41impl<T> AsRef<T> for Outcome<T> {
42 fn as_ref(&self) -> &T {
43 &self.stream
44 }
45}