accessibility 0.2.0

Bindings for macOS Accessibility services
Documentation
use accessibility_sys::{kAXErrorSuccess, AXError};
use std::mem::MaybeUninit;

pub(crate) unsafe fn ax_call<F, V>(f: F) -> Result<V, AXError>
where
    F: Fn(*mut V) -> AXError,
{
    let mut result = MaybeUninit::uninit();
    let err = (f)(result.as_mut_ptr());

    if err != kAXErrorSuccess {
        return Err(err);
    }

    Ok(result.assume_init())
}

pub(crate) unsafe fn ax_call_void<F>(f: F) -> Result<(), AXError>
where
    F: Fn() -> AXError,
{
    let err = (f)();

    if err != kAXErrorSuccess {
        return Err(err);
    }

    Ok(())
}