diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/cocoa_bridge.rs | 17 | ||||
| -rw-r--r-- | src/lib.rs | 1 |
2 files changed, 18 insertions, 0 deletions
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; |
