iohidmanager 0.8.0

Safe Rust bindings for Apple's IOKit HID — enumerate, inspect, and subscribe to HID devices on macOS
Documentation
use iohidmanager::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let manager = HidManager::new()?;
    manager.set_device_matching(None)?;

    let Some(device) = manager.live_devices().into_iter().next() else {
        println!("no HID device available");
        return Ok(());
    };

    let queue = HidQueue::new(&device, 8)?;
    if let Some(element) = device.elements().into_iter().next() {
        queue.add_element(&element);
        println!("queue depth={} contains={}", queue.depth(), queue.contains_element(&element));
        queue.remove_element(&element);
    } else {
        println!("device has no HID elements");
    }
    Ok(())
}