|
|
|
@ -2,7 +2,7 @@ use crate::domain::{self, checker, config}; |
|
|
|
|
use crate::origin; |
|
|
|
|
use std::error::Error; |
|
|
|
|
use std::future::Future; |
|
|
|
|
use std::pin; |
|
|
|
|
use std::{pin, sync}; |
|
|
|
|
|
|
|
|
|
#[derive(thiserror::Error, Debug)] |
|
|
|
|
pub enum GetConfigError { |
|
|
|
@ -113,8 +113,8 @@ impl From<config::SetError> for SyncWithConfigError { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//#[mockall::automock(type Origin=origin::MockOrigin;)]
|
|
|
|
|
pub trait Manager: Send + Sync { |
|
|
|
|
//#[mockall::automock]
|
|
|
|
|
pub trait Manager { |
|
|
|
|
fn get_config(&self, domain: &domain::Name) -> Result<config::Config, GetConfigError>; |
|
|
|
|
fn get_origin( |
|
|
|
|
&self, |
|
|
|
@ -128,36 +128,47 @@ pub trait Manager: Send + Sync { |
|
|
|
|
) -> pin::Pin<Box<dyn Future<Output = Result<(), SyncWithConfigError>> + Send + '_>>; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub trait BoxedManager: Manager + Send + Sync + Clone {} |
|
|
|
|
|
|
|
|
|
struct ManagerImpl<OriginStore, DomainConfigStore> |
|
|
|
|
where |
|
|
|
|
OriginStore: origin::store::BoxedStore, |
|
|
|
|
DomainConfigStore: config::BoxedStore, |
|
|
|
|
{ |
|
|
|
|
origin_store: OriginStore, |
|
|
|
|
domain_config_store: DomainConfigStore, |
|
|
|
|
domain_checker: checker::DNSChecker, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub fn new<OriginStore, DomainConfigStore>( |
|
|
|
|
origin_store: OriginStore, |
|
|
|
|
domain_config_store: DomainConfigStore, |
|
|
|
|
domain_checker: checker::DNSChecker, |
|
|
|
|
) -> impl Manager |
|
|
|
|
) -> impl BoxedManager |
|
|
|
|
where |
|
|
|
|
OriginStore: origin::store::Store, |
|
|
|
|
DomainConfigStore: config::Store, |
|
|
|
|
OriginStore: origin::store::BoxedStore, |
|
|
|
|
DomainConfigStore: config::BoxedStore, |
|
|
|
|
{ |
|
|
|
|
ManagerImpl { |
|
|
|
|
sync::Arc::new(ManagerImpl { |
|
|
|
|
origin_store, |
|
|
|
|
domain_config_store, |
|
|
|
|
domain_checker, |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
struct ManagerImpl<OriginStore, DomainConfigStore> |
|
|
|
|
impl<OriginStore, DomainConfigStore> BoxedManager |
|
|
|
|
for sync::Arc<ManagerImpl<OriginStore, DomainConfigStore>> |
|
|
|
|
where |
|
|
|
|
OriginStore: origin::store::Store, |
|
|
|
|
DomainConfigStore: config::Store, |
|
|
|
|
OriginStore: origin::store::BoxedStore, |
|
|
|
|
DomainConfigStore: config::BoxedStore, |
|
|
|
|
{ |
|
|
|
|
origin_store: OriginStore, |
|
|
|
|
domain_config_store: DomainConfigStore, |
|
|
|
|
domain_checker: checker::DNSChecker, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
impl<OriginStore, DomainConfigStore> Manager for ManagerImpl<OriginStore, DomainConfigStore> |
|
|
|
|
impl<OriginStore, DomainConfigStore> Manager |
|
|
|
|
for sync::Arc<ManagerImpl<OriginStore, DomainConfigStore>> |
|
|
|
|
where |
|
|
|
|
OriginStore: origin::store::Store, |
|
|
|
|
DomainConfigStore: config::Store, |
|
|
|
|
OriginStore: origin::store::BoxedStore, |
|
|
|
|
DomainConfigStore: config::BoxedStore, |
|
|
|
|
{ |
|
|
|
|
fn get_config(&self, domain: &domain::Name) -> Result<config::Config, GetConfigError> { |
|
|
|
|
Ok(self.domain_config_store.get(domain)?) |
|
|
|
|