camel_component_api/
component_context.rs1use std::sync::Arc;
2
3use camel_api::{LeaderElector, MetricsCollector};
4use camel_language_api::Language;
5
6use crate::Component;
7
8pub trait ComponentContext: Send + Sync {
10 fn resolve_component(&self, scheme: &str) -> Option<Arc<dyn Component>>;
12
13 fn resolve_language(&self, name: &str) -> Option<Arc<dyn Language>>;
15
16 fn metrics(&self) -> Arc<dyn MetricsCollector>;
18
19 fn leader_elector(&self) -> Arc<dyn LeaderElector>;
21}
22
23pub struct NoOpComponentContext;
25
26impl ComponentContext for NoOpComponentContext {
27 fn resolve_component(&self, _scheme: &str) -> Option<Arc<dyn Component>> {
28 None
29 }
30
31 fn resolve_language(&self, _name: &str) -> Option<Arc<dyn Language>> {
32 None
33 }
34
35 fn metrics(&self) -> Arc<dyn MetricsCollector> {
36 Arc::new(camel_api::NoOpMetrics)
37 }
38
39 fn leader_elector(&self) -> Arc<dyn LeaderElector> {
40 Arc::new(camel_api::NoopLeaderElector)
41 }
42}