acton_core/actor/
managed_agent.rs1use std::fmt;
18use std::fmt::Debug;
19use std::fmt::Formatter;
20
21use acton_ern::prelude::*;
22use tokio::sync::mpsc::Receiver;
23use tokio_util::task::TaskTracker;
24
25pub use idle::Idle;
26
27use crate::common::{
28 AgentHandle, AsyncLifecycleHandler, BrokerRef, HaltSignal, ParentRef, ReactorMap,
29};
30use crate::message::Envelope;
31use crate::prelude::AgentRuntime;
32
33mod idle;
34pub mod started;
35
36pub struct ManagedAgent<AgentState, ManagedAgent: Default + Send + Debug + 'static> {
39 pub(crate) handle: AgentHandle,
40
41 pub(crate) parent: Option<ParentRef>,
42
43 pub(crate) broker: BrokerRef,
44
45 pub(crate) halt_signal: HaltSignal,
46
47 pub(crate) id: Ern,
48 pub(crate) runtime: AgentRuntime,
49 pub model: ManagedAgent,
51
52 pub(crate) tracker: TaskTracker,
53
54 pub(crate) inbox: Receiver<Envelope>,
55 pub(crate) before_start: AsyncLifecycleHandler<ManagedAgent>,
57 pub(crate) after_start: AsyncLifecycleHandler<ManagedAgent>,
59 pub(crate) before_stop: AsyncLifecycleHandler<ManagedAgent>,
61 pub(crate) after_stop: AsyncLifecycleHandler<ManagedAgent>,
63 pub(crate) reactors: ReactorMap<ManagedAgent>,
65 _actor_state: std::marker::PhantomData<AgentState>,
66}
67
68impl<ActorState, ManagedEntity: Default + Send + Debug + 'static>
70 ManagedAgent<ActorState, ManagedEntity>
71{
72 pub fn id(&self) -> &Ern {
74 &self.id
75 }
76 pub fn name(&self) -> &str {
78 self.id.root.as_str()
79 }
80
81 pub fn handle(&self) -> &AgentHandle {
83 &self.handle
84 }
85
86 pub fn parent(&self) -> &Option<ParentRef> {
88 &self.parent
89 }
90 pub fn broker(&self) -> &BrokerRef {
92 &self.broker
93 }
94 pub fn runtime(&self) -> &AgentRuntime {
96 &self.runtime
97 }
98}
99
100impl<ActorState, ManagedEntity: Default + Send + Debug + 'static> Debug
101 for ManagedAgent<ActorState, ManagedEntity>
102{
103 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
104 f.debug_struct("ManagedActor")
105 .field("key", &self.id)
106 .finish()
107 }
108}