monoloop_loop/transaction/
bootstrap.rs1use super::channel_registry::ChannelRegistry;
4use super::host_tools::HostToolRegistry;
5use monoloop_contracts::TransactionLimits;
6use std::time::Duration;
7use tokio::runtime::Handle;
8
9#[derive(Clone, Debug)]
11pub struct RuntimeConfig {
12 pub transaction_limits: TransactionLimits,
14 pub enable_mcp_listener: bool,
16 pub default_shutdown_deadline: Duration,
18}
19
20impl Default for RuntimeConfig {
21 fn default() -> Self {
22 Self {
23 transaction_limits: TransactionLimits::default(),
24 enable_mcp_listener: true,
25 default_shutdown_deadline: Duration::from_secs(30),
26 }
27 }
28}
29
30impl RuntimeConfig {
31 pub fn validate(&self) -> Result<(), super::StartupError> {
33 self.transaction_limits.validate().map_err(|e| match e {
34 monoloop_contracts::LimitsError::ZeroCapacity(f) => {
35 super::StartupError::InvalidConfig(f)
36 }
37 monoloop_contracts::LimitsError::Inconsistent(_) => {
38 super::StartupError::InvalidConfig("inconsistent transaction limits")
39 }
40 })?;
41 if self.default_shutdown_deadline.is_zero() {
42 return Err(super::StartupError::InvalidConfig(
43 "default_shutdown_deadline",
44 ));
45 }
46 Ok(())
47 }
48}
49
50pub struct RuntimeBootstrap {
59 pub config: RuntimeConfig,
61 pub channels: ChannelRegistry,
63 pub tools: HostToolRegistry,
65 pub executor: Handle,
67}