Implement AsHandle/AsSocket for Arc/Rc/Box on Windows

Implement the Windows counterpart to #97437 and #107317: Implement
`AsHandle` and `AsSocket` for `Arc<T>`, `Rc<T>`, and `Box<T>`.
This commit is contained in:
Dan Gohman 2023-02-17 14:47:16 -08:00
parent 9aa5c24b7d
commit a117c50b8c
2 changed files with 72 additions and 0 deletions

View File

@ -437,6 +437,42 @@ fn as_handle(&self) -> BorrowedHandle<'_> {
}
}
#[stable(feature = "as_windows_ptrs", since = "CURRENT_RUSTC_VERSION")]
/// This impl allows implementing traits that require `AsHandle` on Arc.
/// ```
/// # #[cfg(windows)] mod group_cfg {
/// # use std::os::windows::io::AsHandle;
/// use std::fs::File;
/// use std::sync::Arc;
///
/// trait MyTrait: AsHandle {}
/// impl MyTrait for Arc<File> {}
/// impl MyTrait for Box<File> {}
/// # }
/// ```
impl<T: AsHandle> AsHandle for crate::sync::Arc<T> {
#[inline]
fn as_handle(&self) -> BorrowedHandle<'_> {
(**self).as_handle()
}
}
#[stable(feature = "as_windows_ptrs", since = "CURRENT_RUSTC_VERSION")]
impl<T: AsHandle> AsHandle for crate::rc::Rc<T> {
#[inline]
fn as_handle(&self) -> BorrowedHandle<'_> {
(**self).as_handle()
}
}
#[stable(feature = "as_windows_ptrs", since = "CURRENT_RUSTC_VERSION")]
impl<T: AsHandle> AsHandle for Box<T> {
#[inline]
fn as_handle(&self) -> BorrowedHandle<'_> {
(**self).as_handle()
}
}
#[stable(feature = "io_safety", since = "1.63.0")]
impl AsHandle for BorrowedHandle<'_> {
#[inline]

View File

@ -247,6 +247,42 @@ fn as_socket(&self) -> BorrowedSocket<'_> {
}
}
#[stable(feature = "as_windows_ptrs", since = "CURRENT_RUSTC_VERSION")]
/// This impl allows implementing traits that require `AsSocket` on Arc.
/// ```
/// # #[cfg(windows)] mod group_cfg {
/// # use std::os::windows::io::AsSocket;
/// use std::net::UdpSocket;
/// use std::sync::Arc;
///
/// trait MyTrait: AsSocket {}
/// impl MyTrait for Arc<UdpSocket> {}
/// impl MyTrait for Box<UdpSocket> {}
/// # }
/// ```
impl<T: AsSocket> AsSocket for crate::sync::Arc<T> {
#[inline]
fn as_socket(&self) -> BorrowedSocket<'_> {
(**self).as_socket()
}
}
#[stable(feature = "as_windows_ptrs", since = "CURRENT_RUSTC_VERSION")]
impl<T: AsSocket> AsSocket for crate::rc::Rc<T> {
#[inline]
fn as_socket(&self) -> BorrowedSocket<'_> {
(**self).as_socket()
}
}
#[stable(feature = "as_windows_ptrs", since = "CURRENT_RUSTC_VERSION")]
impl<T: AsSocket> AsSocket for Box<T> {
#[inline]
fn as_socket(&self) -> BorrowedSocket<'_> {
(**self).as_socket()
}
}
#[stable(feature = "io_safety", since = "1.63.0")]
impl AsSocket for BorrowedSocket<'_> {
#[inline]