Path: blob/main/crates/wasi-tls-nativetls/src/lib.rs
1692 views
//! The `native_tls` provider.12use std::{io, pin::pin};34use wasmtime_wasi_tls::{TlsProvider, TlsStream, TlsTransport};56type BoxFuture<T> = std::pin::Pin<Box<dyn Future<Output = T> + Send>>;78/// The `native_tls` provider.9pub struct NativeTlsProvider {10_priv: (),11}1213impl TlsProvider for NativeTlsProvider {14fn connect(15&self,16server_name: String,17transport: Box<dyn TlsTransport>,18) -> BoxFuture<io::Result<Box<dyn TlsStream>>> {19async fn connect_impl(20server_name: String,21transport: Box<dyn TlsTransport>,22) -> Result<NativeTlsStream, native_tls::Error> {23let connector = native_tls::TlsConnector::new()?;24let stream = tokio_native_tls::TlsConnector::from(connector)25.connect(&server_name, transport)26.await?;27Ok(NativeTlsStream(stream))28}2930Box::pin(async move {31let stream = connect_impl(server_name, transport)32.await33.map_err(|e| io::Error::other(e))?;34Ok(Box::new(stream) as Box<dyn TlsStream>)35})36}37}3839impl Default for NativeTlsProvider {40fn default() -> Self {41Self { _priv: () }42}43}4445struct NativeTlsStream(tokio_native_tls::TlsStream<Box<dyn TlsTransport>>);4647impl TlsStream for NativeTlsStream {}4849impl tokio::io::AsyncRead for NativeTlsStream {50fn poll_read(51mut self: std::pin::Pin<&mut Self>,52cx: &mut std::task::Context<'_>,53buf: &mut tokio::io::ReadBuf<'_>,54) -> std::task::Poll<io::Result<()>> {55pin!(&mut self.as_mut().0).poll_read(cx, buf)56}57}5859impl tokio::io::AsyncWrite for NativeTlsStream {60fn poll_write(61mut self: std::pin::Pin<&mut Self>,62cx: &mut std::task::Context<'_>,63buf: &[u8],64) -> std::task::Poll<io::Result<usize>> {65pin!(&mut self.as_mut().0).poll_write(cx, buf)66}6768fn poll_flush(69mut self: std::pin::Pin<&mut Self>,70cx: &mut std::task::Context<'_>,71) -> std::task::Poll<Result<(), io::Error>> {72pin!(&mut self.as_mut().0).poll_flush(cx)73}7475fn poll_shutdown(76mut self: std::pin::Pin<&mut Self>,77cx: &mut std::task::Context<'_>,78) -> std::task::Poll<Result<(), io::Error>> {79pin!(&mut self.as_mut().0).poll_shutdown(cx)80}81}828384