#[cfg(unix)]
mod imp {
use std::os::fd::{AsRawFd, FromRawFd};
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub(crate) struct PlatformMetadata;
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub(crate) struct PlatformOpenOptions;
pub(crate) type RawFile = std::os::fd::RawFd;
pub(crate) type OwnedFile = std::os::fd::OwnedFd;
pub(crate) type RawSock = std::os::fd::RawFd;
pub(crate) type OwnedSock = std::os::fd::OwnedFd;
pub(crate) fn raw_file(file: &OwnedFile) -> RawFile {
file.as_raw_fd()
}
pub(crate) fn raw_sock(sock: &OwnedSock) -> RawSock {
sock.as_raw_fd()
}
pub(crate) unsafe fn owned_sock_from_raw(sock: RawSock) -> OwnedSock {
unsafe { OwnedSock::from_raw_fd(sock) }
}
}
#[cfg(windows)]
mod imp {
use std::os::windows::io::{AsRawHandle, AsRawSocket, FromRawSocket, RawHandle};
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub(crate) struct PlatformMetadata {
pub(crate) file_attributes: u32,
}
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub(crate) struct PlatformOpenOptions {
pub(crate) access_mode: Option<u32>,
pub(crate) share_mode: Option<u32>,
pub(crate) custom_flags: u32,
pub(crate) attributes: u32,
pub(crate) security_qos_flags: u32,
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub(crate) struct RawFile(isize);
impl RawFile {
pub(crate) fn from_handle(handle: RawHandle) -> Self {
Self(handle as isize)
}
pub(crate) fn as_handle(self) -> RawHandle {
self.0 as RawHandle
}
}
pub(crate) type OwnedFile = std::os::windows::io::OwnedHandle;
pub(crate) type RawSock = std::os::windows::io::RawSocket;
pub(crate) type OwnedSock = std::os::windows::io::OwnedSocket;
pub(crate) fn raw_file(file: &OwnedFile) -> RawFile {
RawFile::from_handle(file.as_raw_handle())
}
pub(crate) fn raw_sock(sock: &OwnedSock) -> RawSock {
sock.as_raw_socket()
}
pub(crate) unsafe fn owned_sock_from_raw(sock: RawSock) -> OwnedSock {
unsafe { OwnedSock::from_raw_socket(sock) }
}
}
pub(crate) use imp::*;