hl-engine 0.1.11

Safe Rust lifecycle API for the standalone HL Linux guest engine
use std::ffi::OsString;

use crate::{extension::ExtensionSpec, Guest};

use super::{
    CheckpointSpec, CpuSpec, DebugSpec, EntropySpec, FilesystemSpec, GuestPlatform, IdentitySpec,
    NamespaceSpec, NetworkSpec, ObservabilitySpec, ProcessSpec, ResourceSpec, SecuritySpec,
    TimeSpec, TranslationCacheSpec,
};

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct MachineSpec {
    pub guest: GuestPlatform,
    pub cpu: CpuSpec,
    pub process: ProcessSpec,
    pub identity: IdentitySpec,
    pub filesystem: FilesystemSpec,
    pub namespaces: NamespaceSpec,
    pub network: NetworkSpec,
    pub resources: ResourceSpec,
    pub security: SecuritySpec,
    pub time: TimeSpec,
    pub entropy: EntropySpec,
    pub cache: TranslationCacheSpec,
    pub checkpoint: CheckpointSpec,
    pub observability: ObservabilitySpec,
    pub debug: DebugSpec,
    pub extensions: Vec<ExtensionSpec>,
}

impl MachineSpec {
    #[must_use]
    pub fn new(architecture: Guest, executable: impl Into<OsString>) -> Self {
        Self {
            guest: GuestPlatform::linux(architecture),
            cpu: CpuSpec::default(),
            process: ProcessSpec::new(executable),
            identity: IdentitySpec::default(),
            filesystem: FilesystemSpec::default(),
            namespaces: NamespaceSpec::default(),
            network: NetworkSpec::default(),
            resources: ResourceSpec::default(),
            security: SecuritySpec::default(),
            time: TimeSpec::default(),
            entropy: EntropySpec::default(),
            cache: TranslationCacheSpec::default(),
            checkpoint: CheckpointSpec::default(),
            observability: ObservabilitySpec::default(),
            debug: DebugSpec::default(),
            extensions: Vec::new(),
        }
    }
}