#[cfg(windows)]
use crate::os::windows::{
AsHandleOrSocket, AsRawHandleOrSocket, AsRawReadWriteHandleOrSocket, AsReadWriteHandleOrSocket,
BorrowedHandleOrSocket, FromRawHandleOrSocket, IntoRawHandleOrSocket, OwnedHandleOrSocket,
RawHandleOrSocket,
};
#[cfg(not(windows))]
use {
crate::os::rustix::{AsRawFd, AsRawReadWriteFd, AsReadWriteFd, FromRawFd, IntoRawFd, RawFd},
io_lifetimes::{AsFd, BorrowedFd, OwnedFd},
};
#[cfg(not(windows))]
pub type BorrowedGrip<'a> = BorrowedFd<'a>;
#[cfg(not(windows))]
pub type OwnedGrip = OwnedFd;
#[cfg(windows)]
pub type BorrowedGrip<'a> = BorrowedHandleOrSocket<'a>;
#[cfg(windows)]
pub type OwnedGrip = OwnedHandleOrSocket;
#[cfg(not(windows))]
pub trait AsGrip: AsFd {
fn as_grip(&self) -> BorrowedGrip<'_>;
}
#[cfg(windows)]
pub trait AsGrip: AsHandleOrSocket {
fn as_grip(&self) -> BorrowedGrip<'_>;
}
#[cfg(not(windows))]
pub trait AsReadWriteGrip: AsReadWriteFd {
fn as_read_grip(&self) -> BorrowedGrip<'_>;
fn as_write_grip(&self) -> BorrowedGrip<'_>;
}
#[cfg(windows)]
pub trait AsReadWriteGrip: AsReadWriteHandleOrSocket {
fn as_read_grip(&self) -> BorrowedGrip<'_>;
fn as_write_grip(&self) -> BorrowedGrip<'_>;
}
#[cfg(not(windows))]
pub trait IntoGrip: Into<OwnedFd> {
fn into_grip(self) -> OwnedGrip;
}
#[cfg(windows)]
pub trait IntoGrip: Into<OwnedHandleOrSocket> {
fn into_grip(self) -> OwnedGrip;
}
#[cfg(not(windows))]
pub trait FromGrip: From<OwnedFd> {
fn from_grip(owned_grip: OwnedGrip) -> Self;
}
#[cfg(windows)]
pub trait FromGrip: From<OwnedHandleOrSocket> {
fn from_grip(owned_grip: OwnedGrip) -> Self;
}
#[cfg(not(windows))]
impl<T: AsFd> AsGrip for T {
#[inline]
fn as_grip(&self) -> BorrowedGrip<'_> {
self.as_fd()
}
}
#[cfg(windows)]
impl<T: AsHandleOrSocket> AsGrip for T {
#[inline]
fn as_grip(&self) -> BorrowedGrip<'_> {
self.as_handle_or_socket()
}
}
#[cfg(not(windows))]
impl<T: AsReadWriteFd> AsReadWriteGrip for T {
#[inline]
fn as_read_grip(&self) -> BorrowedGrip<'_> {
self.as_read_fd()
}
#[inline]
fn as_write_grip(&self) -> BorrowedGrip<'_> {
self.as_write_fd()
}
}
#[cfg(windows)]
impl<T: AsReadWriteHandleOrSocket> AsReadWriteGrip for T {
#[inline]
fn as_read_grip(&self) -> BorrowedGrip<'_> {
self.as_read_handle_or_socket()
}
#[inline]
fn as_write_grip(&self) -> BorrowedGrip<'_> {
self.as_write_handle_or_socket()
}
}
#[cfg(not(windows))]
impl<T: Into<OwnedFd>> IntoGrip for T {
#[inline]
fn into_grip(self) -> OwnedGrip {
self.into()
}
}
#[cfg(windows)]
impl<T: Into<OwnedHandleOrSocket>> IntoGrip for T {
#[inline]
fn into_grip(self) -> OwnedGrip {
self.into()
}
}
#[cfg(not(windows))]
impl<T: From<OwnedFd>> FromGrip for T {
#[inline]
fn from_grip(owned_grip: OwnedGrip) -> Self {
Self::from(owned_grip)
}
}
#[cfg(windows)]
impl<T: From<OwnedHandleOrSocket>> FromGrip for T {
#[inline]
fn from_grip(owned_grip: OwnedGrip) -> Self {
Self::from(owned_grip)
}
}
#[cfg(not(windows))]
pub type RawGrip = RawFd;
#[cfg(windows)]
pub type RawGrip = RawHandleOrSocket;
#[cfg(not(windows))]
pub trait AsRawGrip: AsRawFd {
fn as_raw_grip(&self) -> RawGrip;
}
#[cfg(windows)]
pub trait AsRawGrip: AsRawHandleOrSocket {
fn as_raw_grip(&self) -> RawGrip;
}
#[cfg(not(windows))]
pub trait AsRawReadWriteGrip: AsRawReadWriteFd {
fn as_raw_read_grip(&self) -> RawGrip;
fn as_raw_write_grip(&self) -> RawGrip;
}
#[cfg(windows)]
pub trait AsRawReadWriteGrip: AsRawReadWriteHandleOrSocket {
fn as_raw_read_grip(&self) -> RawGrip;
fn as_raw_write_grip(&self) -> RawGrip;
}
#[cfg(not(windows))]
pub trait IntoRawGrip: IntoRawFd {
fn into_raw_grip(self) -> RawGrip;
}
#[cfg(windows)]
pub trait IntoRawGrip: IntoRawHandleOrSocket {
fn into_raw_grip(self) -> RawGrip;
}
#[cfg(not(windows))]
pub trait FromRawGrip: FromRawFd {
unsafe fn from_raw_grip(raw_grip: RawGrip) -> Self;
}
#[cfg(windows)]
pub trait FromRawGrip: FromRawHandleOrSocket {
unsafe fn from_raw_grip(raw_grip: RawGrip) -> Self;
}
#[cfg(not(windows))]
impl<T: AsRawFd> AsRawGrip for T {
#[inline]
fn as_raw_grip(&self) -> RawGrip {
self.as_raw_fd()
}
}
#[cfg(windows)]
impl<T: AsRawHandleOrSocket> AsRawGrip for T {
#[inline]
fn as_raw_grip(&self) -> RawGrip {
self.as_raw_handle_or_socket()
}
}
#[cfg(not(windows))]
impl<T: AsRawReadWriteFd> AsRawReadWriteGrip for T {
#[inline]
fn as_raw_read_grip(&self) -> RawGrip {
self.as_raw_read_fd()
}
#[inline]
fn as_raw_write_grip(&self) -> RawGrip {
self.as_raw_write_fd()
}
}
#[cfg(windows)]
impl<T: AsRawReadWriteHandleOrSocket> AsRawReadWriteGrip for T {
#[inline]
fn as_raw_read_grip(&self) -> RawGrip {
self.as_raw_read_handle_or_socket()
}
#[inline]
fn as_raw_write_grip(&self) -> RawGrip {
self.as_raw_write_handle_or_socket()
}
}
#[cfg(not(windows))]
impl<T: IntoRawFd> IntoRawGrip for T {
#[inline]
fn into_raw_grip(self) -> RawGrip {
self.into_raw_fd()
}
}
#[cfg(windows)]
impl<T: IntoRawHandleOrSocket> IntoRawGrip for T {
#[inline]
fn into_raw_grip(self) -> RawGrip {
self.into_raw_handle_or_socket()
}
}
#[cfg(not(windows))]
impl<T: FromRawFd> FromRawGrip for T {
#[inline]
unsafe fn from_raw_grip(raw_grip: RawGrip) -> Self {
Self::from_raw_fd(raw_grip)
}
}
#[cfg(windows)]
impl<T: FromRawHandleOrSocket> FromRawGrip for T {
#[inline]
unsafe fn from_raw_grip(raw_grip: RawGrip) -> Self {
Self::from_raw_handle_or_socket(raw_grip)
}
}
#[cfg(not(windows))]
#[must_use]
#[inline]
pub unsafe fn borrow_raw<'a>(grip: RawGrip) -> BorrowedGrip<'a> {
BorrowedFd::borrow_raw(grip)
}
#[cfg(windows)]
#[must_use]
#[inline]
pub unsafe fn borrow_raw<'a>(grip: RawGrip) -> BorrowedGrip<'a> {
BorrowedHandleOrSocket::borrow_raw(grip)
}