use core::cell::UnsafeCell;
use core::ffi::*;
use core::marker::{PhantomData, PhantomPinned};
use core::ptr::NonNull;
#[cfg(feature = "objc2")]
use objc2::__framework_prelude::*;
use objc2_core_foundation::*;
use crate::*;
pub const kDAReturnSuccess: c_int = 0;
pub const kDAReturnError: c_int = -119930879;
pub const kDAReturnBusy: c_int = -119930878;
pub const kDAReturnBadArgument: c_int = -119930877;
pub const kDAReturnExclusiveAccess: c_int = -119930876;
pub const kDAReturnNoResources: c_int = -119930875;
pub const kDAReturnNotFound: c_int = -119930874;
pub const kDAReturnNotMounted: c_int = -119930873;
pub const kDAReturnNotPermitted: c_int = -119930872;
pub const kDAReturnNotPrivileged: c_int = -119930871;
pub const kDAReturnNotReady: c_int = -119930870;
pub const kDAReturnNotWritable: c_int = -119930869;
pub const kDAReturnUnsupported: c_int = -119930868;
#[cfg(feature = "libc")]
pub type DAReturn = libc::mach_error_t;
#[doc(alias = "DADissenterRef")]
#[repr(C)]
pub struct DADissenter {
inner: [u8; 0],
_p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
}
cf_type!(
unsafe impl DADissenter {}
);
#[cfg(feature = "objc2")]
cf_objc2_type!(
unsafe impl RefEncode<"__DADissenter"> for DADissenter {}
);
impl DADissenter {
#[doc(alias = "DADissenterCreate")]
#[cfg(feature = "libc")]
#[inline]
pub unsafe fn new(
allocator: Option<&CFAllocator>,
status: DAReturn,
string: Option<&CFString>,
) -> CFRetained<DADissenter> {
extern "C-unwind" {
fn DADissenterCreate(
allocator: Option<&CFAllocator>,
status: DAReturn,
string: Option<&CFString>,
) -> Option<NonNull<DADissenter>>;
}
let ret = unsafe { DADissenterCreate(allocator, status, string) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { CFRetained::from_raw(ret) }
}
#[doc(alias = "DADissenterGetStatus")]
#[cfg(feature = "libc")]
#[inline]
pub unsafe fn status(&self) -> DAReturn {
extern "C-unwind" {
fn DADissenterGetStatus(dissenter: &DADissenter) -> DAReturn;
}
unsafe { DADissenterGetStatus(self) }
}
#[doc(alias = "DADissenterGetStatusString")]
#[inline]
pub unsafe fn status_string(&self) -> Option<CFRetained<CFString>> {
extern "C-unwind" {
fn DADissenterGetStatusString(dissenter: &DADissenter) -> Option<NonNull<CFString>>;
}
let ret = unsafe { DADissenterGetStatusString(self) };
ret.map(|ret| unsafe { CFRetained::retain(ret) })
}
}
#[cfg(feature = "libc")]
#[deprecated = "renamed to `DADissenter::new`"]
#[inline]
pub unsafe extern "C-unwind" fn DADissenterCreate(
allocator: Option<&CFAllocator>,
status: DAReturn,
string: Option<&CFString>,
) -> CFRetained<DADissenter> {
extern "C-unwind" {
fn DADissenterCreate(
allocator: Option<&CFAllocator>,
status: DAReturn,
string: Option<&CFString>,
) -> Option<NonNull<DADissenter>>;
}
let ret = unsafe { DADissenterCreate(allocator, status, string) };
let ret = ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { CFRetained::from_raw(ret) }
}
extern "C-unwind" {
#[cfg(feature = "libc")]
#[deprecated = "renamed to `DADissenter::status`"]
pub fn DADissenterGetStatus(dissenter: &DADissenter) -> DAReturn;
}
#[deprecated = "renamed to `DADissenter::status_string`"]
#[inline]
pub unsafe extern "C-unwind" fn DADissenterGetStatusString(
dissenter: &DADissenter,
) -> Option<CFRetained<CFString>> {
extern "C-unwind" {
fn DADissenterGetStatusString(dissenter: &DADissenter) -> Option<NonNull<CFString>>;
}
let ret = unsafe { DADissenterGetStatusString(dissenter) };
ret.map(|ret| unsafe { CFRetained::retain(ret) })
}