use std::sync::Arc;
use std::sync::Mutex;
use trz_gateway_common::retry_strategy::RetryStrategy;
use trz_gateway_common::security_configuration::certificate::CertificateConfig;
use super::client::AuthCode;
use super::client::config::ClientConfig;
use super::client::service::ClientService;
pub trait TunnelConfig: ClientConfig {
type ClientCertificate: CertificateConfig;
fn client_certificate(&self) -> Self::ClientCertificate;
fn client_service(&self) -> impl ClientService;
fn retry_strategy(&self) -> RetryStrategy;
fn current_auth_code(&self) -> Arc<Mutex<AuthCode>>;
}
impl<T: TunnelConfig> TunnelConfig for Arc<T> {
type ClientCertificate = T::ClientCertificate;
fn client_certificate(&self) -> Self::ClientCertificate {
self.as_ref().client_certificate()
}
fn client_service(&self) -> impl ClientService {
self.as_ref().client_service()
}
fn retry_strategy(&self) -> RetryStrategy {
self.as_ref().retry_strategy()
}
fn current_auth_code(&self) -> Arc<Mutex<AuthCode>> {
self.as_ref().current_auth_code()
}
}