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