use super::channel_registry::ChannelRegistry;
use super::host_tools::HostToolRegistry;
use monoloop_contracts::TransactionLimits;
use std::time::Duration;
use tokio::runtime::Handle;
#[derive(Clone, Debug)]
pub struct RuntimeConfig {
pub transaction_limits: TransactionLimits,
pub enable_mcp_listener: bool,
pub default_shutdown_deadline: Duration,
}
impl Default for RuntimeConfig {
fn default() -> Self {
Self {
transaction_limits: TransactionLimits::default(),
enable_mcp_listener: true,
default_shutdown_deadline: Duration::from_secs(30),
}
}
}
impl RuntimeConfig {
pub fn validate(&self) -> Result<(), super::StartupError> {
self.transaction_limits.validate().map_err(|e| match e {
monoloop_contracts::LimitsError::ZeroCapacity(f) => {
super::StartupError::InvalidConfig(f)
}
monoloop_contracts::LimitsError::Inconsistent(_) => {
super::StartupError::InvalidConfig("inconsistent transaction limits")
}
})?;
if self.default_shutdown_deadline.is_zero() {
return Err(super::StartupError::InvalidConfig(
"default_shutdown_deadline",
));
}
Ok(())
}
}
pub struct RuntimeBootstrap {
pub config: RuntimeConfig,
pub channels: ChannelRegistry,
pub tools: HostToolRegistry,
pub executor: Handle,
}