raw_window_handle_ffi/handles/
ohos_ndk.rs

1use crate::{RawWindowHandle, RawWindowHandleData};
2use std::{ffi::c_void, ptr::NonNull};
3
4/// raw_window_handle_ffi:
5///         This type is ABI-stable and FFI-compatible analogue for [`raw_window_handle::OhosNdkWindowHandle`].
6///         Can be converted to and from the referenced type.
7///
8/// Raw window handle for Ohos NDK.
9#[repr(C)]
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
11pub struct OhosNdkWindowHandle {
12    pub native_window: NonNull<c_void>,
13}
14
15unsafe impl Send for OhosNdkWindowHandle {}
16unsafe impl Sync for OhosNdkWindowHandle {}
17
18impl From<raw_window_handle::OhosNdkWindowHandle> for OhosNdkWindowHandle {
19    fn from(value: raw_window_handle::OhosNdkWindowHandle) -> Self {
20        Self {
21            native_window: value.native_window,
22        }
23    }
24}
25
26impl OhosNdkWindowHandle {
27    /// Converts FFI type back to the original [`raw_window_handle::AppKitWindowHandle`].
28    ///
29    /// # Safety
30    /// Original type [`raw_window_handle::AppKitWindowHandle`] is marked as `non_exaustive`,
31    /// and therefore it is impossible to convert to it completely safely.
32    pub unsafe fn into(self) -> raw_window_handle::OhosNdkWindowHandle {
33        raw_window_handle::OhosNdkWindowHandle::new(self.native_window)
34    }
35}
36
37impl From<OhosNdkWindowHandle> for RawWindowHandle {
38    fn from(val: OhosNdkWindowHandle) -> RawWindowHandle {
39        RawWindowHandle {
40            kind: crate::RawWindowHandleKind::OhosNdkWindowHandle,
41            data: RawWindowHandleData { ohos_ndk: val },
42        }
43    }
44}