#![doc(html_root_url = "https://docs.rs/heim-virt/0.0.11")]
#![deny(
unused,
unused_imports,
unused_features,
bare_trait_objects,
future_incompatible,
missing_debug_implementations,
missing_docs,
nonstandard_style,
dead_code,
deprecated
)]
#![warn(
trivial_casts,
trivial_numeric_casts,
unused_extern_crates,
unused_import_braces,
unused_results
)]
use heim_common::prelude::*;
mod sys;
#[derive(Debug, Ord, PartialOrd, Eq, PartialEq, Clone, Hash)]
pub enum Virtualization {
Kvm,
Qemu,
Bochs,
Xen,
Uml,
Vmware,
Oracle,
HyperV,
Bhyve,
Parallels,
Qnx,
Acrn,
SystemdNspawn,
LxcLibvirt,
Lxc,
OpenVz,
Docker,
Podman,
Rkt,
Wsl,
Unknown,
#[doc(hidden)]
__Nonexhaustive,
}
impl Virtualization {
pub fn is_vm(&self) -> bool {
match self {
Virtualization::Kvm => true,
Virtualization::Qemu => true,
Virtualization::Bochs => true,
Virtualization::Xen => true,
Virtualization::Uml => true,
Virtualization::Vmware => true,
Virtualization::Oracle => true,
Virtualization::HyperV => true,
Virtualization::Bhyve => true,
Virtualization::Qnx => true,
Virtualization::Acrn => true,
_ => false,
}
}
pub fn is_container(&self) -> bool {
match self {
Virtualization::SystemdNspawn => true,
Virtualization::LxcLibvirt => true,
Virtualization::Lxc => true,
Virtualization::OpenVz => true,
Virtualization::Docker => true,
Virtualization::Podman => true,
Virtualization::Rkt => true,
Virtualization::Wsl => true,
_ => false,
}
}
pub fn as_str(&self) -> &str {
match self {
Virtualization::Kvm => "kvm",
Virtualization::Qemu => "qemu",
Virtualization::Bochs => "bochs",
Virtualization::Xen => "xen",
Virtualization::Uml => "uml",
Virtualization::Vmware => "vmware",
Virtualization::Oracle => "oracle",
Virtualization::HyperV => "hyperv",
Virtualization::Bhyve => "bhyve",
Virtualization::Qnx => "qnx",
Virtualization::Acrn => "acrn",
Virtualization::SystemdNspawn => "systemd-nspawn",
Virtualization::LxcLibvirt => "lxc-libvirt",
Virtualization::Lxc => "lxc",
Virtualization::OpenVz => "openvz",
Virtualization::Docker => "docker",
Virtualization::Podman => "podman",
Virtualization::Rkt => "rkt",
Virtualization::Wsl => "wsl",
Virtualization::Unknown => "unknown",
_ => unreachable!(),
}
}
}
pub fn detect() -> impl Future<Output = Option<Virtualization>> {
self::sys::detect()
}