base_endpoint/tls/
tls_server_endpoint.rs1use super::TlsListener;
5use crate::{BindEndpoint, BindOptions};
6use base_scheduler::{Cancellation, OperationResult};
7
8#[derive(Clone, Debug)]
10pub struct TlsServerEndpoint<E, T> {
11 endpoint: E,
12 acceptor: T,
13}
14
15impl<E, T> TlsServerEndpoint<E, T> {
16 pub fn new(endpoint: E, acceptor: T) -> Self {
18 Self { endpoint, acceptor }
19 }
20
21 pub fn endpoint(&self) -> &E {
23 &self.endpoint
24 }
25}
26
27impl<S, E, T> BindEndpoint<S> for TlsServerEndpoint<E, T>
28where
29 S: Sync + ?Sized,
30 E: BindEndpoint<S>,
31 T: Clone + Send + Sync,
32{
33 type Listener = TlsListener<E::Listener, T>;
34
35 async fn bind(
36 &self,
37 scheduler: &S,
38 options: BindOptions,
39 cancellation: &Cancellation,
40 ) -> OperationResult<Vec<Self::Listener>> {
41 cancellation.check()?;
42 let listeners = self.endpoint.bind(scheduler, options, cancellation).await?;
43 Ok(listeners
44 .into_iter()
45 .map(|listener| TlsListener::new(listener, self.acceptor.clone()))
46 .collect())
47 }
48}