rustls_cert_reloadable_resolver/
resolver.rs1#[derive(Debug)]
5pub struct ReloadableResolver<Loader> {
6 reloadable: reloadable_state::Reloadable<rustls::sign::CertifiedKey, Loader>,
8}
9
10impl<Loader> ReloadableResolver<Loader>
11where
12 Loader: reloadable_state::core::Loader<Value = rustls::sign::CertifiedKey>,
13{
14 pub async fn init(loader: Loader) -> Result<Self, Loader::Error> {
16 let (reloadable, _) = reloadable_state::Reloadable::init_load(loader).await?;
17 Ok(Self { reloadable })
18 }
19
20 pub async fn reload(&self) -> Result<(), Loader::Error> {
22 let _ = self.reloadable.reload().await?;
23 Ok(())
24 }
25}
26
27impl<Loader> rustls::server::ResolvesServerCert for ReloadableResolver<Loader>
28where
29 Loader: reloadable_state::core::Loader<Value = rustls::sign::CertifiedKey>,
30 Loader: Send,
31 Loader: std::fmt::Debug,
32{
33 fn resolve(
34 &self,
35 _client_hello: rustls::server::ClientHello,
36 ) -> Option<std::sync::Arc<rustls::sign::CertifiedKey>> {
37 Some(self.reloadable.get())
38 }
39}
40
41impl<Loader> std::ops::Deref for ReloadableResolver<Loader> {
42 type Target = reloadable_state::Reloadable<rustls::sign::CertifiedKey, Loader>;
43
44 fn deref(&self) -> &Self::Target {
45 &self.reloadable
46 }
47}
48
49impl<Loader> std::ops::DerefMut for ReloadableResolver<Loader> {
50 fn deref_mut(&mut self) -> &mut Self::Target {
51 &mut self.reloadable
52 }
53}