pub mod ads;
pub mod cds;
pub mod eds;
pub mod lds;
pub mod rds;
pub mod sds;
use std::sync::Arc;
use xds_cache::ShardedCache;
use xds_core::ResourceRegistry;
use crate::config::ServerConfig;
use crate::delta::DeltaHandler;
use crate::sotw::SotwHandler;
pub use ads::{AdsConfig, AdsService, AggregatedDiscoveryService, AggregatedDiscoveryServiceServer};
pub use cds::{CdsService, ClusterDiscoveryService, ClusterDiscoveryServiceServer};
pub use eds::{EdsService, EndpointDiscoveryService, EndpointDiscoveryServiceServer};
pub use lds::{LdsService, ListenerDiscoveryService, ListenerDiscoveryServiceServer};
pub use rds::{RdsService, RouteDiscoveryService, RouteDiscoveryServiceServer};
pub use sds::{SdsService, SecretDiscoveryService, SecretDiscoveryServiceServer};
#[derive(Debug, Clone)]
pub struct ServiceState {
pub cache: Arc<ShardedCache>,
pub registry: Arc<ResourceRegistry>,
pub config: Arc<ServerConfig>,
pub sotw: Arc<SotwHandler>,
pub delta: Arc<DeltaHandler>,
}
impl ServiceState {
pub fn new(
cache: Arc<ShardedCache>,
registry: Arc<ResourceRegistry>,
config: ServerConfig,
) -> Self {
let sotw = Arc::new(SotwHandler::new(Arc::clone(&cache), Arc::clone(®istry)));
let delta = Arc::new(DeltaHandler::new(Arc::clone(&cache), Arc::clone(®istry)));
Self {
cache,
registry,
config: Arc::new(config),
sotw,
delta,
}
}
pub fn create_services(
&self,
) -> (
AdsService,
CdsService,
LdsService,
RdsService,
EdsService,
SdsService,
) {
(
AdsService::new(Arc::clone(&self.cache), Arc::clone(&self.registry)),
CdsService::new_with_handlers(
Arc::clone(&self.cache),
Arc::clone(&self.registry),
Arc::clone(&self.sotw),
Arc::clone(&self.delta),
),
LdsService::new_with_handlers(
Arc::clone(&self.cache),
Arc::clone(&self.registry),
Arc::clone(&self.sotw),
Arc::clone(&self.delta),
),
RdsService::new_with_handlers(
Arc::clone(&self.cache),
Arc::clone(&self.registry),
Arc::clone(&self.sotw),
Arc::clone(&self.delta),
),
EdsService::new_with_handlers(
Arc::clone(&self.cache),
Arc::clone(&self.registry),
Arc::clone(&self.sotw),
Arc::clone(&self.delta),
),
SdsService::new_with_handlers(
Arc::clone(&self.cache),
Arc::clone(&self.registry),
Arc::clone(&self.sotw),
Arc::clone(&self.delta),
),
)
}
}