use crate::core::AgentRegistry;
use crate::events::{AgentObserver, DynObserverFactory, TraceContext};
use aether_auth::OAuthCredentialStorage;
use std::sync::Arc;
#[derive(Clone, Default)]
pub struct AgentDeps {
pub oauth_credential_store: Option<Arc<dyn OAuthCredentialStorage>>,
pub observer_factory: Option<DynObserverFactory>,
pub parent_trace_context: Option<TraceContext>,
pub agent_registry: AgentRegistry,
}
impl AgentDeps {
pub fn new(
oauth_credential_store: Arc<dyn OAuthCredentialStorage>,
observer_factory: Option<DynObserverFactory>,
) -> Self {
Self {
oauth_credential_store: Some(oauth_credential_store),
observer_factory,
parent_trace_context: None,
agent_registry: AgentRegistry::default(),
}
}
pub fn with_parent_trace_context(mut self, parent: Option<TraceContext>) -> Self {
self.parent_trace_context = parent;
self
}
pub fn with_agent_registry(mut self, registry: AgentRegistry) -> Self {
self.agent_registry = registry;
self
}
pub fn observer(&self) -> Option<Box<dyn AgentObserver>> {
self.observer_factory.as_ref().map(|factory| factory.agent(self.parent_trace_context.as_ref()))
}
}