use std::sync::Arc;
use camel_api::{MetricsCollector, PlatformService};
use camel_language_api::Language;
use crate::Component;
pub trait ComponentContext: Send + Sync {
fn resolve_component(&self, scheme: &str) -> Option<Arc<dyn Component>>;
fn resolve_language(&self, name: &str) -> Option<Arc<dyn Language>>;
fn metrics(&self) -> Arc<dyn MetricsCollector>;
fn platform_service(&self) -> Arc<dyn PlatformService>;
}
pub struct NoOpComponentContext;
impl ComponentContext for NoOpComponentContext {
fn resolve_component(&self, _scheme: &str) -> Option<Arc<dyn Component>> {
None
}
fn resolve_language(&self, _name: &str) -> Option<Arc<dyn Language>> {
None
}
fn metrics(&self) -> Arc<dyn MetricsCollector> {
Arc::new(camel_api::NoOpMetrics)
}
fn platform_service(&self) -> Arc<dyn PlatformService> {
Arc::new(camel_api::NoopPlatformService::default())
}
}