async_tls_lite/
acceptor.rs

1// ref https://github.com/async-rs/async-tls/blob/v0.7.1/src/acceptor.rs
2
3use std::io;
4use std::sync::Arc;
5
6use futures_util::io::{AsyncRead, AsyncWrite};
7use rustls::{ServerConfig, ServerSession};
8
9use crate::{handshake, TlsStream};
10
11#[derive(Clone)]
12pub struct TlsAcceptor {
13    inner: Arc<ServerConfig>,
14}
15
16impl From<Arc<ServerConfig>> for TlsAcceptor {
17    fn from(inner: Arc<ServerConfig>) -> TlsAcceptor {
18        TlsAcceptor { inner }
19    }
20}
21
22impl TlsAcceptor {
23    pub async fn accept<IO>(&self, stream: IO) -> io::Result<TlsStream<ServerSession, IO>>
24    where
25        IO: AsyncRead + AsyncWrite + Unpin,
26    {
27        let session = ServerSession::new(&self.inner);
28
29        handshake(session, stream).await
30    }
31}