aether_core/core/
agent_deps.rs1use crate::core::AgentRegistry;
2use crate::events::{AgentObserver, DynObserverFactory, TraceContext};
3use aether_auth::OAuthCredentialStorage;
4use std::sync::Arc;
5
6#[derive(Clone, Default)]
10pub struct AgentDeps {
11 pub oauth_credential_store: Option<Arc<dyn OAuthCredentialStorage>>,
12 pub observer_factory: Option<DynObserverFactory>,
13 pub parent_trace_context: Option<TraceContext>,
16 pub agent_registry: AgentRegistry,
17 pub session_affinity_key: Option<String>,
18}
19
20impl AgentDeps {
21 pub fn new(
22 oauth_credential_store: Arc<dyn OAuthCredentialStorage>,
23 observer_factory: Option<DynObserverFactory>,
24 ) -> Self {
25 Self { oauth_credential_store: Some(oauth_credential_store), observer_factory, ..Self::default() }
26 }
27
28 pub fn with_parent_trace_context(mut self, parent: Option<TraceContext>) -> Self {
30 self.parent_trace_context = parent;
31 self
32 }
33
34 pub fn with_agent_registry(mut self, registry: AgentRegistry) -> Self {
35 self.agent_registry = registry;
36 self
37 }
38
39 pub fn with_session_affinity_key(mut self, key: impl Into<String>) -> Self {
40 self.session_affinity_key = Some(key.into());
41 self
42 }
43
44 pub fn observer(&self, agent_name: &str) -> Option<Box<dyn AgentObserver>> {
46 self.observer_factory
47 .as_ref()
48 .map(|factory| factory.agent(Some(agent_name), self.parent_trace_context.as_ref()))
49 }
50}