use std::ffi::c_void;
use super::{CFSerializable, CFType};
pub type CFNumberRef = *const c_void;
pub struct CFNumber {
inner: CFType,
}
impl CFNumber {
pub fn get(&self, ty: CFNumberType) -> Option<isize> {
let mut data: isize = 0;
let succeeded = unsafe { CFNumberGetValue(self.inner.ptr(), ty, (&mut data) as *mut isize as *mut c_void) };
if !succeeded {
return None;
}
Some(data)
}
}
impl CFSerializable for CFNumber {
fn from_ptr(ptr: *const c_void) -> Self {
Self {
inner: CFType::from_get(ptr).unwrap(),
}
}
fn to_ptr(&self) -> *const c_void {
self.inner.ptr()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(isize)]
pub enum CFNumberType {
Int = 9,
}
extern "C-unwind" {
pub(super) fn CFNumberGetValue(number: CFNumberRef, ty: CFNumberType, value: *mut c_void) -> bool;
}