impl<T: AsRawFd> for {Arc,Box}<T>
This allows implementing traits that require a raw FD on Arc and Box. Previously, you'd have to add the function to the trait itself: ```rust trait MyTrait { fn as_raw_fd(&self) -> RawFd; } impl<T: MyTrait> MyTrait for Arc<T> { fn as_raw_fd(&self) -> RawFd { (**self).as_raw_fd() } } ```
This commit is contained in:
parent
3a8b0144c8
commit
ed1e3512dc
@ -222,3 +222,35 @@ fn as_raw_fd(&self) -> RawFd {
|
|||||||
libc::STDERR_FILENO
|
libc::STDERR_FILENO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "asraw_ptrs", since = "1.63.0")]
|
||||||
|
/// This blanket impl allows implementing custom traits that require `AsRawFd` on Arc.
|
||||||
|
/// ```
|
||||||
|
/// # #[cfg(any(unix, target_os = "wasi"))] mod group_cfg {
|
||||||
|
/// # #[cfg(target_os = "wasi")]
|
||||||
|
/// # use std::os::wasi::io::AsRawFd;
|
||||||
|
/// # #[cfg(unix)]
|
||||||
|
/// # use std::os::unix::io::AsRawFd;
|
||||||
|
/// use std::net::UdpSocket;
|
||||||
|
/// use std::sync::Arc;
|
||||||
|
/// trait MyTrait: AsRawFd {
|
||||||
|
/// }
|
||||||
|
/// impl MyTrait for Arc<UdpSocket> {}
|
||||||
|
/// impl MyTrait for Box<UdpSocket> {}
|
||||||
|
/// # }
|
||||||
|
/// ```
|
||||||
|
#[stable(feature = "asrawfd_ptrs", since = "1.63.0")]
|
||||||
|
impl<T: AsRawFd> AsRawFd for crate::sync::Arc<T> {
|
||||||
|
#[inline]
|
||||||
|
fn as_raw_fd(&self) -> RawFd {
|
||||||
|
(**self).as_raw_fd()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "asraw_ptrs", since = "1.63.0")]
|
||||||
|
impl<T: AsRawFd> AsRawFd for Box<T> {
|
||||||
|
#[inline]
|
||||||
|
fn as_raw_fd(&self) -> RawFd {
|
||||||
|
(**self).as_raw_fd()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user