use std::path::PathBuf;
use serde::{Deserialize, Serialize};
#[cfg(feature = "net")]
use microsandbox_network::config::NetworkConfig;
use crate::vm::{MetricsSlotHandoff, StartupCommand};
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct LaunchConfig {
pub db_path: PathBuf,
pub db_connect_timeout_secs: u64,
pub log_dir: PathBuf,
pub runtime_dir: PathBuf,
pub sandboxes_dir: PathBuf,
pub agent_sock: PathBuf,
pub libkrunfw_path: PathBuf,
pub startup: Option<StartupCommand>,
pub lifecycle: Lifecycle,
pub metrics: MetricsConfig,
pub rootfs: RootfsConfig,
pub mounts: Vec<String>,
pub disks: Vec<String>,
pub init_path: Option<PathBuf>,
pub env: Vec<String>,
pub workdir: Option<PathBuf>,
pub exec_path: Option<PathBuf>,
pub exec_args: Vec<String>,
#[cfg(feature = "net")]
pub network: Option<NetworkConfig>,
#[cfg(feature = "net")]
pub sandbox_slot: u64,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct Lifecycle {
pub max_duration_secs: Option<u64>,
pub idle_timeout_secs: Option<u64>,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct MetricsConfig {
pub sample_interval_ms: u64,
pub disabled: bool,
pub slot: Option<MetricsSlotHandoff>,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct RootfsConfig {
pub path: Option<PathBuf>,
pub disk: Option<PathBuf>,
pub disk_format: Option<String>,
pub disk_readonly: bool,
pub upper: Option<PathBuf>,
}