eject 0.1.1

A crate to control the tray of your CD drive
Documentation
use super::Device;
use crate::platform::device::DeviceHandle;
use std::{mem::forget, os::unix::prelude::*};

impl AsRawFd for Device {
    #[inline]
    fn as_raw_fd(&self) -> RawFd {
        self.handle.0
    }
}

impl AsFd for Device {
    #[inline]
    fn as_fd(&self) -> BorrowedFd<'_> {
        unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
    }
}

impl FromRawFd for Device {
    #[inline]
    unsafe fn from_raw_fd(fd: RawFd) -> Self {
        Self {
            handle: DeviceHandle(fd),
        }
    }
}

impl From<OwnedFd> for Device {
    #[inline]
    fn from(fd: OwnedFd) -> Self {
        unsafe { Self::from_raw_fd(fd.into_raw_fd()) }
    }
}

impl IntoRawFd for Device {
    #[inline]
    fn into_raw_fd(self) -> RawFd {
        let fd = self.as_raw_fd();
        forget(self);
        fd
    }
}

impl From<Device> for OwnedFd {
    #[inline]
    fn from(dev: Device) -> Self {
        unsafe { Self::from_raw_fd(dev.into_raw_fd()) }
    }
}