diff options
| -rw-r--r-- | Cargo.toml | 1 | ||||
| -rw-r--r-- | dome_key_map.h | 2 | ||||
| -rw-r--r-- | src/cocoa_bridge.rs | 17 | ||||
| -rw-r--r-- | src/lib.rs | 1 |
4 files changed, 21 insertions, 0 deletions
@@ -5,6 +5,7 @@ version = "0.0.1" [dependencies] cocoa = "0.18.0" combine = "3.4.0" +libc = "0.2.43" [build-dependencies] cbindgen = "0.6.2" diff --git a/dome_key_map.h b/dome_key_map.h index 473d2f0..d128979 100644 --- a/dome_key_map.h +++ b/dome_key_map.h @@ -20,3 +20,5 @@ typedef struct { Option_CString action; MapKind kind; } KeyActionResult; + +const KeyActionResult *c_run_key_action(const HeadphoneButton *trigger, size_t length); diff --git a/src/cocoa_bridge.rs b/src/cocoa_bridge.rs index d4749f0..d98701f 100644 --- a/src/cocoa_bridge.rs +++ b/src/cocoa_bridge.rs @@ -1,7 +1,9 @@ use std::ffi::CString; +use std::slice; use cocoa::base::nil; use cocoa::foundation::{NSArray, NSAutoreleasePool, NSDictionary}; +use libc::size_t; use {HeadphoneButton, MapGroup, MapKind}; @@ -45,6 +47,21 @@ pub struct KeyActionResult { } #[no_mangle] +pub extern "C" fn c_run_key_action( + trigger: *const HeadphoneButton, + length: size_t, +) -> *const KeyActionResult { + let trigger = unsafe { + assert!(!trigger.is_null()); + + slice::from_raw_parts(trigger, length as usize) + }; + + let result = run_key_action(trigger).unwrap(); + &result as *const KeyActionResult +} + +#[no_mangle] pub extern "C" fn run_key_action( trigger: &[HeadphoneButton] ) -> Option<KeyActionResult> { @@ -2,6 +2,7 @@ extern crate cocoa; #[macro_use] extern crate combine; +extern crate libc; mod cocoa_bridge; mod parser; |
