1use std::ops::Deref;
2
3use windows::Win32::{
4 Foundation::{HANDLE, HWND},
5 UI::WindowsAndMessaging::HCURSOR,
6};
7
8#[derive(Debug, Clone, Copy)]
9pub(crate) struct SafeHandle {
10 raw: HANDLE,
11}
12
13unsafe impl Send for SafeHandle {}
14unsafe impl Sync for SafeHandle {}
15
16impl From<HANDLE> for SafeHandle {
17 fn from(value: HANDLE) -> Self {
18 SafeHandle { raw: value }
19 }
20}
21
22impl Deref for SafeHandle {
23 type Target = HANDLE;
24
25 fn deref(&self) -> &Self::Target {
26 &self.raw
27 }
28}
29
30#[derive(Debug, Clone, Copy)]
31pub(crate) struct SafeCursor {
32 raw: HCURSOR,
33}
34
35unsafe impl Send for SafeCursor {}
36unsafe impl Sync for SafeCursor {}
37
38impl From<HCURSOR> for SafeCursor {
39 fn from(value: HCURSOR) -> Self {
40 SafeCursor { raw: value }
41 }
42}
43
44impl Deref for SafeCursor {
45 type Target = HCURSOR;
46
47 fn deref(&self) -> &Self::Target {
48 &self.raw
49 }
50}
51
52#[derive(Clone, Copy)]
53pub(crate) struct SafeHwnd {
54 raw: HWND,
55}
56
57unsafe impl Send for SafeHwnd {}
58unsafe impl Sync for SafeHwnd {}
59
60impl From<HWND> for SafeHwnd {
61 fn from(value: HWND) -> Self {
62 SafeHwnd { raw: value }
63 }
64}
65
66impl From<SafeHwnd> for HWND {
67 fn from(value: SafeHwnd) -> Self {
68 value.raw
69 }
70}
71
72impl Deref for SafeHwnd {
73 type Target = HWND;
74
75 fn deref(&self) -> &Self::Target {
76 &self.raw
77 }
78}