xds_server/services/
mod.rs1pub mod ads;
12pub mod cds;
13pub mod eds;
14pub mod lds;
15pub mod rds;
16pub mod sds;
17
18use std::sync::Arc;
19
20use xds_cache::ShardedCache;
21use xds_core::ResourceRegistry;
22
23use crate::config::ServerConfig;
24use crate::delta::DeltaHandler;
25use crate::sotw::SotwHandler;
26
27pub use ads::{AdsConfig, AdsService, AggregatedDiscoveryService, AggregatedDiscoveryServiceServer};
29pub use cds::{CdsService, ClusterDiscoveryService, ClusterDiscoveryServiceServer};
30pub use eds::{EdsService, EndpointDiscoveryService, EndpointDiscoveryServiceServer};
31pub use lds::{LdsService, ListenerDiscoveryService, ListenerDiscoveryServiceServer};
32pub use rds::{RdsService, RouteDiscoveryService, RouteDiscoveryServiceServer};
33pub use sds::{SdsService, SecretDiscoveryService, SecretDiscoveryServiceServer};
34
35#[derive(Debug, Clone)]
37pub struct ServiceState {
38 pub cache: Arc<ShardedCache>,
40 pub registry: Arc<ResourceRegistry>,
42 pub config: Arc<ServerConfig>,
44 pub sotw: Arc<SotwHandler>,
46 pub delta: Arc<DeltaHandler>,
48}
49
50impl ServiceState {
51 pub fn new(
53 cache: Arc<ShardedCache>,
54 registry: Arc<ResourceRegistry>,
55 config: ServerConfig,
56 ) -> Self {
57 let sotw = Arc::new(SotwHandler::new(Arc::clone(&cache), Arc::clone(®istry)));
58 let delta = Arc::new(DeltaHandler::new(Arc::clone(&cache), Arc::clone(®istry)));
59
60 Self {
61 cache,
62 registry,
63 config: Arc::new(config),
64 sotw,
65 delta,
66 }
67 }
68
69 pub fn create_services(
74 &self,
75 ) -> (
76 AdsService,
77 CdsService,
78 LdsService,
79 RdsService,
80 EdsService,
81 SdsService,
82 ) {
83 (
84 AdsService::new(Arc::clone(&self.cache), Arc::clone(&self.registry)),
85 CdsService::new_with_handlers(
86 Arc::clone(&self.cache),
87 Arc::clone(&self.registry),
88 Arc::clone(&self.sotw),
89 Arc::clone(&self.delta),
90 ),
91 LdsService::new_with_handlers(
92 Arc::clone(&self.cache),
93 Arc::clone(&self.registry),
94 Arc::clone(&self.sotw),
95 Arc::clone(&self.delta),
96 ),
97 RdsService::new_with_handlers(
98 Arc::clone(&self.cache),
99 Arc::clone(&self.registry),
100 Arc::clone(&self.sotw),
101 Arc::clone(&self.delta),
102 ),
103 EdsService::new_with_handlers(
104 Arc::clone(&self.cache),
105 Arc::clone(&self.registry),
106 Arc::clone(&self.sotw),
107 Arc::clone(&self.delta),
108 ),
109 SdsService::new_with_handlers(
110 Arc::clone(&self.cache),
111 Arc::clone(&self.registry),
112 Arc::clone(&self.sotw),
113 Arc::clone(&self.delta),
114 ),
115 )
116 }
117}