vent/kvm/
capabilities.rs

1use super::{sys, Result, ErrorKind};
2
3pub trait CheckCapability {
4    fn check_capability(&mut self, Capability) -> Result<i32>;
5
6    fn has_capability(&mut self, cap: Capability) -> bool {
7        self.check_capability(cap).map(|v| v > 0).unwrap_or(false)
8    }
9
10    fn assert_capability(&mut self, cap: Capability) -> Result<()> {
11        self.check_capability(cap)
12            .and_then(|v| if v < 0 { Err(ErrorKind::KvmMissingCapabilityError.into()) } else { Ok(()) })
13    }
14}
15
16#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
17pub enum Capability {
18    EnableCap,
19    EnableCapVm,
20}
21
22impl Into<i32> for Capability {
23    fn into(self) -> i32 {
24        match self {
25            Capability::EnableCap => sys::KVM_CAP_ENABLE_CAP,
26            Capability::EnableCapVm => sys::KVM_CAP_ENABLE_CAP_VM
27        }
28    }
29}