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}