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::windows::prelude::*};
use windows::Win32::Foundation::HANDLE;

impl AsRawHandle for Device {
    #[inline]
    fn as_raw_handle(&self) -> RawHandle {
        self.handle.0 .0 as _
    }
}

impl AsHandle for Device {
    #[inline]
    fn as_handle(&self) -> BorrowedHandle<'_> {
        unsafe { BorrowedHandle::borrow_raw(self.as_raw_handle()) }
    }
}

impl FromRawHandle for Device {
    #[inline]
    unsafe fn from_raw_handle(handle: RawHandle) -> Self {
        Self {
            handle: DeviceHandle(HANDLE(handle as isize)),
        }
    }
}

impl From<OwnedHandle> for Device {
    #[inline]
    fn from(handle: OwnedHandle) -> Self {
        unsafe { Self::from_raw_handle(handle.into_raw_handle()) }
    }
}

impl IntoRawHandle for Device {
    #[inline]
    fn into_raw_handle(self) -> RawHandle {
        let handle = self.handle.0 .0 as _;
        forget(self);
        handle
    }
}

impl From<Device> for OwnedHandle {
    #[inline]
    fn from(dev: Device) -> Self {
        unsafe { Self::from_raw_handle(dev.into_raw_handle()) }
    }
}