base_endpoint/tls/
tls_client_endpoint.rs1use super::TlsConnector;
5use crate::ConnectEndpoint;
6use base_scheduler::{Cancellation, OperationResult};
7
8#[derive(Clone, Debug)]
10pub struct TlsClientEndpoint<E, T> {
11 endpoint: E,
12 connector: T,
13 server_name: String,
14}
15
16impl<E, T> TlsClientEndpoint<E, T> {
17 pub fn new(endpoint: E, connector: T, server_name: impl Into<String>) -> Self {
19 Self {
20 endpoint,
21 connector,
22 server_name: server_name.into(),
23 }
24 }
25
26 pub fn endpoint(&self) -> &E {
28 &self.endpoint
29 }
30
31 pub fn server_name(&self) -> &str {
33 &self.server_name
34 }
35}
36
37impl<S, E, T> ConnectEndpoint<S> for TlsClientEndpoint<E, T>
38where
39 S: Sync + ?Sized,
40 E: ConnectEndpoint<S>,
41 T: TlsConnector<S, E::Connection>,
42{
43 type Connection = T::Connection;
44
45 async fn connect(
46 &self,
47 scheduler: &S,
48 cancellation: &Cancellation,
49 ) -> OperationResult<Self::Connection> {
50 cancellation.check()?;
51 let connection = self.endpoint.connect(scheduler, cancellation).await?;
52 self.connector
54 .connect(scheduler, connection, &self.server_name, cancellation)
55 .await
56 }
57}