use acton_ern::Ern;
use dashmap::DashMap;
use tokio_util::sync::CancellationToken;
use crate::common::{ActonConfig, ActorHandle, BrokerRef};
#[cfg(feature = "ipc")]
use crate::common::ipc::{IpcTypeRegistry, SubscriptionManager};
#[cfg(feature = "ipc")]
use parking_lot::RwLock;
#[cfg(feature = "ipc")]
use std::sync::Arc;
#[derive(Debug, Clone)]
pub struct ActonInner {
pub(crate) broker: BrokerRef,
pub(crate) roots: DashMap<Ern, ActorHandle>,
pub(crate) cancellation_token: CancellationToken,
pub(crate) config: ActonConfig,
#[cfg(feature = "ipc")]
pub(crate) ipc_type_registry: Arc<IpcTypeRegistry>,
#[cfg(feature = "ipc")]
pub(crate) ipc_actor_registry: Arc<DashMap<String, ActorHandle>>,
#[cfg(feature = "ipc")]
pub(crate) ipc_subscription_manager: Arc<RwLock<Option<Arc<SubscriptionManager>>>>,
}
impl Default for ActonInner {
fn default() -> Self {
Self {
broker: ActorHandle::default(),
roots: DashMap::default(),
cancellation_token: CancellationToken::new(),
config: ActonConfig::default(),
#[cfg(feature = "ipc")]
ipc_type_registry: Arc::new(IpcTypeRegistry::new()),
#[cfg(feature = "ipc")]
ipc_actor_registry: Arc::new(DashMap::new()),
#[cfg(feature = "ipc")]
ipc_subscription_manager: Arc::new(RwLock::new(None)),
}
}
}