ui-automation 0.1.1

Control the User Interface, cross-platform.
Documentation
// Copyright (C) 2024 Tristan Gerritsen <tristan@thewoosh.org>
// All Rights Reserved.

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;
}