Skip to main content

camel_component_api/
component_context.rs

1use std::sync::Arc;
2
3use camel_api::{LeaderElector, MetricsCollector};
4use camel_language_api::Language;
5
6use crate::Component;
7
8/// Runtime context passed to components during endpoint creation.
9pub trait ComponentContext: Send + Sync {
10    /// Resolve a component by scheme.
11    fn resolve_component(&self, scheme: &str) -> Option<Arc<dyn Component>>;
12
13    /// Resolve a language by name.
14    fn resolve_language(&self, name: &str) -> Option<Arc<dyn Language>>;
15
16    /// Access the active metrics collector.
17    fn metrics(&self) -> Arc<dyn MetricsCollector>;
18
19    /// Access the active leader elector.
20    fn leader_elector(&self) -> Arc<dyn LeaderElector>;
21}
22
23/// Default no-op component context for tests/examples.
24pub 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}