Skip to main content

camel_component_api/
component_context.rs

1use std::sync::Arc;
2
3use camel_api::{MetricsCollector, PlatformService};
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 platform service.
20    fn platform_service(&self) -> Arc<dyn PlatformService>;
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 platform_service(&self) -> Arc<dyn PlatformService> {
40        Arc::new(camel_api::NoopPlatformService::default())
41    }
42}