Auto merge of - sunfishcode:sunfishcode/windows-as-socket-impls, r=dtolnay

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

Implement the Windows counterpart to  and : Implement `AsHandle` and `AsSocket` for `Arc<T>`, `Rc<T>`, and `Box<T>`.
This commit is contained in:
bors 2023-05-14 22:10:09 +00:00
commit a14d6961f9
2 changed files with 72 additions and 0 deletions
library/std/src/os/windows/io

@ -437,6 +437,42 @@ impl<T: AsHandle> AsHandle for &mut T {
}
}
#[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]

@ -254,6 +254,42 @@ impl<T: AsSocket> AsSocket for &mut T {
}
}
#[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]