use super::InstanceSpec;
use crate::runtime::constants::vm_defaults::{DEFAULT_CPUS, DEFAULT_MEMORY_MIB};
use boxlite_shared::errors::BoxliteResult;
#[derive(Clone, Debug)]
pub struct VmmConfig {
pub cpus: Option<u8>,
pub memory_mib: Option<u32>,
}
impl Default for VmmConfig {
fn default() -> Self {
Self {
cpus: Some(DEFAULT_CPUS),
memory_mib: Some(DEFAULT_MEMORY_MIB),
}
}
}
impl VmmConfig {
pub fn new() -> Self {
Self::default()
}
pub fn with_cpus(mut self, cpus: u8) -> Self {
self.cpus = Some(cpus);
self
}
pub fn with_memory_mib(mut self, memory_mib: u32) -> Self {
self.memory_mib = Some(memory_mib);
self
}
}
pub(crate) trait VmmInstanceImpl {
fn enter(self: Box<Self>) -> BoxliteResult<()>;
}
pub struct VmmInstance {
inner: Box<dyn VmmInstanceImpl>,
}
impl VmmInstance {
#[allow(dead_code)] pub(crate) fn new(inner: Box<dyn VmmInstanceImpl>) -> Self {
Self { inner }
}
pub fn enter(self) -> BoxliteResult<()> {
self.inner.enter()
}
}
pub trait Vmm {
fn create(&mut self, config: InstanceSpec) -> BoxliteResult<VmmInstance>;
}