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