use crate::proto::session::ServerOnlySessionInitSettings;
use citadel_crypt::ratchets::Ratchet;
use citadel_io::tokio::macros::support::Future;
use citadel_io::tokio::runtime::Handle;
use citadel_user::account_manager::AccountManager;
use citadel_wire::exports::ClientConfig;
use citadel_wire::hypernode_type::NodeType;
use std::sync::Arc;
use crate::error::NetworkError;
use crate::macros::ContextRequirements;
use crate::prelude::ServerUnderlyingProtocol;
pub mod kernel_communicator;
pub mod kernel_executor;
pub mod kernel_trait;
pub trait RuntimeFuture: Future<Output = Result<(), NetworkError>> + ContextRequirements {}
impl<T: Future<Output = Result<(), NetworkError>> + ContextRequirements> RuntimeFuture for T {}
#[derive(Default, Debug, Clone, Eq, PartialEq)]
pub struct KernelExecutorSettings {
max_concurrency: Option<usize>,
}
impl KernelExecutorSettings {
pub fn with_max_concurrency(mut self, max_concurrency: impl Into<Option<usize>>) -> Self {
self.max_concurrency = max_concurrency.into();
self
}
}
pub struct KernelExecutorArguments<K, R: Ratchet> {
pub rt: Handle,
pub hypernode_type: NodeType,
pub account_manager: AccountManager<R, R>,
pub kernel: K,
pub underlying_proto: ServerUnderlyingProtocol,
pub client_config: Option<Arc<ClientConfig>>,
pub kernel_executor_settings: KernelExecutorSettings,
pub stun_servers: Option<Vec<String>>,
pub server_only_session_init_settings: Option<ServerOnlySessionInitSettings>,
}