1use core::cell::UnsafeCell;
4use core::ffi::*;
5use core::marker::{PhantomData, PhantomPinned};
6use core::ptr::NonNull;
7#[cfg(feature = "objc2")]
8use objc2::__framework_prelude::*;
9use objc2_core_foundation::*;
10
11use crate::*;
12
13#[repr(C)]
17#[derive(Clone, Copy, Debug, PartialEq)]
18pub struct AuthorizationValue {
19 pub length: usize,
20 pub data: *mut c_void,
21}
22
23#[cfg(feature = "objc2")]
24unsafe impl Encode for AuthorizationValue {
25 const ENCODING: Encoding = Encoding::Struct(
26 "AuthorizationValue",
27 &[<usize>::ENCODING, <*mut c_void>::ENCODING],
28 );
29}
30
31#[cfg(feature = "objc2")]
32unsafe impl RefEncode for AuthorizationValue {
33 const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
34}
35
36#[repr(C)]
45#[derive(Clone, Copy, Debug, PartialEq)]
46pub struct AuthorizationValueVector {
47 pub count: u32,
48 pub values: NonNull<AuthorizationValue>,
49}
50
51#[cfg(feature = "objc2")]
52unsafe impl Encode for AuthorizationValueVector {
53 const ENCODING: Encoding = Encoding::Struct(
54 "AuthorizationValueVector",
55 &[<u32>::ENCODING, <NonNull<AuthorizationValue>>::ENCODING],
56 );
57}
58
59#[cfg(feature = "objc2")]
60unsafe impl RefEncode for AuthorizationValueVector {
61 const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
62}
63
64#[repr(transparent)]
72#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
73pub struct AuthorizationContextFlags(pub u32);
74bitflags::bitflags! {
75 impl AuthorizationContextFlags: u32 {
76 #[doc(alias = "kAuthorizationContextFlagExtractable")]
77 const Extractable = 1<<0;
78 #[doc(alias = "kAuthorizationContextFlagVolatile")]
79 const Volatile = 1<<1;
80 #[doc(alias = "kAuthorizationContextFlagSticky")]
81 const Sticky = 1<<2;
82 }
83}
84
85#[cfg(feature = "objc2")]
86unsafe impl Encode for AuthorizationContextFlags {
87 const ENCODING: Encoding = u32::ENCODING;
88}
89
90#[cfg(feature = "objc2")]
91unsafe impl RefEncode for AuthorizationContextFlags {
92 const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
93}
94
95#[cfg(feature = "Authorization")]
99pub type AuthorizationMechanismId = AuthorizationString;
100
101#[cfg(feature = "Authorization")]
105pub type AuthorizationPluginId = AuthorizationString;
106
107pub type AuthorizationPluginRef = *mut c_void;
111
112pub type AuthorizationMechanismRef = *mut c_void;
116
117#[repr(C)]
119#[derive(Debug)]
120pub struct __OpaqueAuthorizationEngine {
121 inner: [u8; 0],
122 _p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
123}
124
125#[cfg(feature = "objc2")]
126unsafe impl RefEncode for __OpaqueAuthorizationEngine {
127 const ENCODING_REF: Encoding =
128 Encoding::Pointer(&Encoding::Struct("__OpaqueAuthorizationEngine", &[]));
129}
130
131pub type AuthorizationEngineRef = *mut __OpaqueAuthorizationEngine;
135
136pub type AuthorizationSessionId = *mut c_void;
141
142#[repr(u32)]
147#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
148pub enum AuthorizationResult {
149 #[doc(alias = "kAuthorizationResultAllow")]
150 Allow = 0,
151 #[doc(alias = "kAuthorizationResultDeny")]
152 Deny = 1,
153 #[doc(alias = "kAuthorizationResultUndefined")]
154 Undefined = 2,
155 #[doc(alias = "kAuthorizationResultUserCanceled")]
156 UserCanceled = 3,
157}
158
159#[cfg(feature = "objc2")]
160unsafe impl Encode for AuthorizationResult {
161 const ENCODING: Encoding = u32::ENCODING;
162}
163
164#[cfg(feature = "objc2")]
165unsafe impl RefEncode for AuthorizationResult {
166 const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
167}
168
169pub const kAuthorizationPluginInterfaceVersion: c_uint = 0;
171
172pub const kAuthorizationCallbacksVersion: c_uint = 4;
174
175#[cfg(feature = "Authorization")]
195#[repr(C)]
196#[allow(unpredictable_function_pointer_comparisons)]
197#[derive(Clone, Copy, Debug, PartialEq)]
198pub struct AuthorizationCallbacks {
199 pub version: u32,
200 pub SetResult:
201 unsafe extern "C-unwind" fn(AuthorizationEngineRef, AuthorizationResult) -> OSStatus,
202 pub RequestInterrupt: unsafe extern "C-unwind" fn(AuthorizationEngineRef) -> OSStatus,
203 pub DidDeactivate: unsafe extern "C-unwind" fn(AuthorizationEngineRef) -> OSStatus,
204 pub GetContextValue: unsafe extern "C-unwind" fn(
205 AuthorizationEngineRef,
206 AuthorizationString,
207 *mut AuthorizationContextFlags,
208 *mut *const AuthorizationValue,
209 ) -> OSStatus,
210 pub SetContextValue: unsafe extern "C-unwind" fn(
211 AuthorizationEngineRef,
212 AuthorizationString,
213 AuthorizationContextFlags,
214 NonNull<AuthorizationValue>,
215 ) -> OSStatus,
216 pub GetHintValue: unsafe extern "C-unwind" fn(
217 AuthorizationEngineRef,
218 AuthorizationString,
219 *mut *const AuthorizationValue,
220 ) -> OSStatus,
221 pub SetHintValue: unsafe extern "C-unwind" fn(
222 AuthorizationEngineRef,
223 AuthorizationString,
224 NonNull<AuthorizationValue>,
225 ) -> OSStatus,
226 pub GetArguments: unsafe extern "C-unwind" fn(
227 AuthorizationEngineRef,
228 NonNull<*const AuthorizationValueVector>,
229 ) -> OSStatus,
230 pub GetSessionId: unsafe extern "C-unwind" fn(
231 AuthorizationEngineRef,
232 *mut AuthorizationSessionId,
233 ) -> OSStatus,
234 pub GetImmutableHintValue: unsafe extern "C-unwind" fn(
235 AuthorizationEngineRef,
236 AuthorizationString,
237 *mut *const AuthorizationValue,
238 ) -> OSStatus,
239 pub GetLAContext:
240 unsafe extern "C-unwind" fn(AuthorizationEngineRef, *mut *const CFType) -> OSStatus,
241 pub GetTokenIdentities: unsafe extern "C-unwind" fn(
242 AuthorizationEngineRef,
243 NonNull<CFType>,
244 *mut *const CFArray,
245 ) -> OSStatus,
246 pub GetTKTokenWatcher:
247 unsafe extern "C-unwind" fn(AuthorizationEngineRef, *mut *const CFType) -> OSStatus,
248 pub RemoveHintValue:
249 unsafe extern "C-unwind" fn(AuthorizationEngineRef, AuthorizationString) -> OSStatus,
250 pub RemoveContextValue:
251 unsafe extern "C-unwind" fn(AuthorizationEngineRef, AuthorizationString) -> OSStatus,
252}
253
254#[cfg(all(feature = "Authorization", feature = "objc2"))]
255unsafe impl Encode for AuthorizationCallbacks {
256 const ENCODING: Encoding = Encoding::Struct("AuthorizationCallbacks", &[
257 <u32>::ENCODING,
258 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,AuthorizationResult,) -> OSStatus>::ENCODING,
259 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,) -> OSStatus>::ENCODING,
260 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,) -> OSStatus>::ENCODING,
261 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,AuthorizationString,*mut AuthorizationContextFlags,*mut *const AuthorizationValue,) -> OSStatus>::ENCODING,
262 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,AuthorizationString,AuthorizationContextFlags,NonNull<AuthorizationValue>,) -> OSStatus>::ENCODING,
263 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,AuthorizationString,*mut *const AuthorizationValue,) -> OSStatus>::ENCODING,
264 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,AuthorizationString,NonNull<AuthorizationValue>,) -> OSStatus>::ENCODING,
265 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,NonNull<*const AuthorizationValueVector>,) -> OSStatus>::ENCODING,
266 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,*mut AuthorizationSessionId,) -> OSStatus>::ENCODING,
267 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,AuthorizationString,*mut *const AuthorizationValue,) -> OSStatus>::ENCODING,
268 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,*mut *const CFType,) -> OSStatus>::ENCODING,
269 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,NonNull<CFType>,*mut *const CFArray,) -> OSStatus>::ENCODING,
270 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,*mut *const CFType,) -> OSStatus>::ENCODING,
271 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,AuthorizationString,) -> OSStatus>::ENCODING,
272 <unsafe extern "C-unwind" fn(AuthorizationEngineRef,AuthorizationString,) -> OSStatus>::ENCODING,
273 ]);
274}
275
276#[cfg(all(feature = "Authorization", feature = "objc2"))]
277unsafe impl RefEncode for AuthorizationCallbacks {
278 const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
279}
280
281#[cfg(feature = "Authorization")]
292#[repr(C)]
293#[allow(unpredictable_function_pointer_comparisons)]
294#[derive(Clone, Copy, Debug, PartialEq)]
295pub struct AuthorizationPluginInterface {
296 pub version: u32,
297 pub PluginDestroy: unsafe extern "C-unwind" fn(AuthorizationPluginRef) -> OSStatus,
298 pub MechanismCreate: unsafe extern "C-unwind" fn(
299 AuthorizationPluginRef,
300 AuthorizationEngineRef,
301 AuthorizationMechanismId,
302 NonNull<AuthorizationMechanismRef>,
303 ) -> OSStatus,
304 pub MechanismInvoke: unsafe extern "C-unwind" fn(AuthorizationMechanismRef) -> OSStatus,
305 pub MechanismDeactivate: unsafe extern "C-unwind" fn(AuthorizationMechanismRef) -> OSStatus,
306 pub MechanismDestroy: unsafe extern "C-unwind" fn(AuthorizationMechanismRef) -> OSStatus,
307}
308
309#[cfg(all(feature = "Authorization", feature = "objc2"))]
310unsafe impl Encode for AuthorizationPluginInterface {
311 const ENCODING: Encoding = Encoding::Struct(
312 "AuthorizationPluginInterface",
313 &[
314 <u32>::ENCODING,
315 <unsafe extern "C-unwind" fn(AuthorizationPluginRef) -> OSStatus>::ENCODING,
316 <unsafe extern "C-unwind" fn(
317 AuthorizationPluginRef,
318 AuthorizationEngineRef,
319 AuthorizationMechanismId,
320 NonNull<AuthorizationMechanismRef>,
321 ) -> OSStatus>::ENCODING,
322 <unsafe extern "C-unwind" fn(AuthorizationMechanismRef) -> OSStatus>::ENCODING,
323 <unsafe extern "C-unwind" fn(AuthorizationMechanismRef) -> OSStatus>::ENCODING,
324 <unsafe extern "C-unwind" fn(AuthorizationMechanismRef) -> OSStatus>::ENCODING,
325 ],
326 );
327}
328
329#[cfg(all(feature = "Authorization", feature = "objc2"))]
330unsafe impl RefEncode for AuthorizationPluginInterface {
331 const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
332}
333
334extern "C-unwind" {
335 #[cfg(feature = "Authorization")]
351 pub fn AuthorizationPluginCreate(
352 callbacks: NonNull<AuthorizationCallbacks>,
353 out_plugin: NonNull<AuthorizationPluginRef>,
354 out_plugin_interface: NonNull<*const AuthorizationPluginInterface>,
355 ) -> OSStatus;
356}