#[cfg(unix)]
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
#[cfg(target_os = "wasi")]
use std::os::wasi::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
#[cfg(windows)]
use std::os::windows::io::{
AsRawHandle, AsRawSocket, FromRawHandle, FromRawSocket, IntoRawHandle, IntoRawSocket,
RawHandle, RawSocket,
};
#[cfg(any(unix, target_os = "wasi"))]
pub type RawFilelike = RawFd;
#[cfg(windows)]
pub type RawFilelike = RawHandle;
#[cfg(any(unix, target_os = "wasi"))]
pub type RawSocketlike = RawFd;
#[cfg(windows)]
pub type RawSocketlike = RawSocket;
#[cfg(any(unix, target_os = "wasi"))]
pub trait AsRawFilelike: AsRawFd {
fn as_raw_filelike(&self) -> RawFilelike;
}
#[cfg(any(unix, target_os = "wasi"))]
impl<T: AsRawFd> AsRawFilelike for T {
#[inline]
fn as_raw_filelike(&self) -> RawFilelike {
self.as_raw_fd()
}
}
#[cfg(windows)]
pub trait AsRawFilelike: AsRawHandle {
fn as_raw_filelike(&self) -> RawFilelike;
}
#[cfg(windows)]
impl<T: AsRawHandle> AsRawFilelike for T {
#[inline]
fn as_raw_filelike(&self) -> RawFilelike {
self.as_raw_handle()
}
}
#[cfg(any(unix, target_os = "wasi"))]
pub trait AsRawSocketlike: AsRawFd {
fn as_raw_socketlike(&self) -> RawSocketlike;
}
#[cfg(any(unix, target_os = "wasi"))]
impl<T: AsRawFd> AsRawSocketlike for T {
#[inline]
fn as_raw_socketlike(&self) -> RawSocketlike {
self.as_raw_fd()
}
}
#[cfg(windows)]
pub trait AsRawSocketlike: AsRawSocket {
fn as_raw_socketlike(&self) -> RawSocketlike;
}
#[cfg(windows)]
impl<T: AsRawSocket> AsRawSocketlike for T {
#[inline]
fn as_raw_socketlike(&self) -> RawSocketlike {
self.as_raw_socket()
}
}
#[cfg(any(unix, target_os = "wasi"))]
pub trait IntoRawFilelike: IntoRawFd {
fn into_raw_filelike(self) -> RawFilelike;
}
#[cfg(any(unix, target_os = "wasi"))]
impl<T: IntoRawFd> IntoRawFilelike for T {
#[inline]
fn into_raw_filelike(self) -> RawFilelike {
self.into_raw_fd()
}
}
#[cfg(windows)]
pub trait IntoRawFilelike: IntoRawHandle {
fn into_raw_filelike(self) -> RawFilelike;
}
#[cfg(windows)]
impl<T: IntoRawHandle> IntoRawFilelike for T {
#[inline]
fn into_raw_filelike(self) -> RawFilelike {
self.into_raw_handle()
}
}
#[cfg(any(unix, target_os = "wasi"))]
pub trait IntoRawSocketlike: IntoRawFd {
fn into_raw_socketlike(self) -> RawSocketlike;
}
#[cfg(any(unix, target_os = "wasi"))]
impl<T: IntoRawFd> IntoRawSocketlike for T {
#[inline]
fn into_raw_socketlike(self) -> RawSocketlike {
self.into_raw_fd()
}
}
#[cfg(windows)]
pub trait IntoRawSocketlike: IntoRawSocket {
fn into_raw_socketlike(self) -> RawSocketlike;
}
#[cfg(windows)]
impl<T: IntoRawSocket> IntoRawSocketlike for T {
#[inline]
fn into_raw_socketlike(self) -> RawSocketlike {
self.into_raw_socket()
}
}
#[cfg(any(unix, target_os = "wasi"))]
pub trait FromRawFilelike: FromRawFd {
unsafe fn from_raw_filelike(raw: RawFilelike) -> Self;
}
#[cfg(any(unix, target_os = "wasi"))]
impl<T: FromRawFd> FromRawFilelike for T {
#[inline]
unsafe fn from_raw_filelike(raw: RawFilelike) -> Self {
Self::from_raw_fd(raw)
}
}
#[cfg(windows)]
pub trait FromRawFilelike: FromRawHandle {
unsafe fn from_raw_filelike(raw: RawFilelike) -> Self;
}
#[cfg(windows)]
impl<T: FromRawHandle> FromRawFilelike for T {
#[inline]
unsafe fn from_raw_filelike(raw: RawFilelike) -> Self {
Self::from_raw_handle(raw)
}
}
#[cfg(any(unix, target_os = "wasi"))]
pub trait FromRawSocketlike: FromRawFd {
unsafe fn from_raw_socketlike(raw: RawSocketlike) -> Self;
}
#[cfg(any(unix, target_os = "wasi"))]
impl<T: FromRawFd> FromRawSocketlike for T {
#[inline]
unsafe fn from_raw_socketlike(raw: RawSocketlike) -> Self {
Self::from_raw_fd(raw)
}
}
#[cfg(windows)]
pub trait FromRawSocketlike: FromRawSocket {
unsafe fn from_raw_socketlike(raw: RawSocketlike) -> Self;
}
#[cfg(windows)]
impl<T: FromRawSocket> FromRawSocketlike for T {
#[inline]
unsafe fn from_raw_socketlike(raw: RawSocketlike) -> Self {
Self::from_raw_socket(raw)
}
}