1use alloc::ffi::CString;
2use core::{borrow::Borrow, ops::Deref};
3
4use crate::{DispatchQueue, DispatchRetained};
5
6dispatch_object!(
7 #[doc(alias = "dispatch_workloop_t")]
9 #[doc(alias = "dispatch_workloop_s")]
10 pub struct DispatchWorkloop;
11);
12
13dispatch_object_not_data!(unsafe DispatchWorkloop);
14
15impl DispatchWorkloop {
16 #[inline]
18 pub fn new(label: &str, inactive: bool) -> DispatchRetained<Self> {
19 let label = CString::new(label).expect("Invalid label!");
20
21 unsafe {
23 if inactive {
24 DispatchWorkloop::__new_inactive(label.as_ptr())
25 } else {
26 DispatchWorkloop::__new(label.as_ptr())
27 }
28 }
29 }
30}
31
32impl Deref for DispatchWorkloop {
33 type Target = DispatchQueue;
34
35 #[inline]
37 fn deref(&self) -> &Self::Target {
38 let ptr: *const DispatchWorkloop = self;
39 let ptr: *const DispatchQueue = ptr.cast();
40 unsafe { &*ptr }
43 }
44}
45
46impl AsRef<DispatchQueue> for DispatchWorkloop {
47 #[inline]
48 fn as_ref(&self) -> &DispatchQueue {
49 self
50 }
51}
52
53impl Borrow<DispatchQueue> for DispatchWorkloop {
55 #[inline]
56 fn borrow(&self) -> &DispatchQueue {
57 self
58 }
59}