Skip to main content

camel_component_api/
component_context.rs

1use std::sync::Arc;
2
3use camel_api::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
20/// Default no-op component context for tests/examples.
21pub struct NoOpComponentContext;
22
23impl ComponentContext for NoOpComponentContext {
24    fn resolve_component(&self, _scheme: &str) -> Option<Arc<dyn Component>> {
25        None
26    }
27
28    fn resolve_language(&self, _name: &str) -> Option<Arc<dyn Language>> {
29        None
30    }
31
32    fn metrics(&self) -> Arc<dyn MetricsCollector> {
33        Arc::new(camel_api::NoOpMetrics)
34    }
35}