libxen 0.5.0

Safe bindings for Xen libraries
Documentation
use xen_sys::{xs_close, xs_handle, xs_open};

use crate::XenError;

#[derive(Debug, Clone)]
pub struct XenStoreHandle(pub(crate) *mut xs_handle);

impl XenStoreHandle {
    pub fn new() -> Result<Self, XenError> {
        let handle = unsafe { xs_open(0) };

        if handle.is_null() {
            return Err(XenError::Other("Failed to open xen store"));
        }

        Ok(Self(handle))
    }
}

impl Drop for XenStoreHandle {
    fn drop(&mut self) {
        unsafe {
            xs_close(self.0);
        }
    }
}