1 use crate::sys::windows::Event;
2 
3 use std::cell::UnsafeCell;
4 use std::fmt;
5 
6 use windows_sys::Win32::System::IO::{OVERLAPPED, OVERLAPPED_ENTRY};
7 
8 #[repr(C)]
9 pub(crate) struct Overlapped {
10     inner: UnsafeCell<OVERLAPPED>,
11     pub(crate) callback: fn(&OVERLAPPED_ENTRY, Option<&mut Vec<Event>>),
12 }
13 
14 #[cfg(feature = "os-ext")]
15 impl Overlapped {
new(cb: fn(&OVERLAPPED_ENTRY, Option<&mut Vec<Event>>)) -> Overlapped16     pub(crate) fn new(cb: fn(&OVERLAPPED_ENTRY, Option<&mut Vec<Event>>)) -> Overlapped {
17         Overlapped {
18             inner: UnsafeCell::new(unsafe { std::mem::zeroed() }),
19             callback: cb,
20         }
21     }
22 
as_ptr(&self) -> *const OVERLAPPED23     pub(crate) fn as_ptr(&self) -> *const OVERLAPPED {
24         self.inner.get()
25     }
26 }
27 
28 impl fmt::Debug for Overlapped {
fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result29     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30         f.debug_struct("Overlapped").finish()
31     }
32 }
33 
34 unsafe impl Send for Overlapped {}
35 unsafe impl Sync for Overlapped {}
36