wrapper.rs

 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}