From 076af0f0145b7f924eb32be010311545d039850f Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 26 Aug 2018 08:34:44 +0200 Subject: Link library with a test C program Make a test `includer.c` program that includes the Rust library and calls our `c_run_key_action()` to see if it actually works. Currently it doesn't, we get `(null)` printed to stdout. Add a Makefile with the build command for the C program. cbindgen.toml: Remove `KeyActionResult` from exported types, as the `Option` field it contains caused `gcc` to complain. cocoa_bridge.rs: * Comment out all 'cocoa' crate related code as the 'cocoa' code was interfering with GCC compilation as a result of my not linking to Cocoa frameworks. * Add a new test map definition that corresponds with the one we look for in `includer.c`. parser.rs: Add `#[repr(C)]` to `MapKind` because it needs to be exported in the library and generated into our C header file. --- src/cocoa_bridge.rs | 51 ++++++++++++++++++++++++++------------------------- src/lib.rs | 2 +- src/parser.rs | 1 + 3 files changed, 28 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/cocoa_bridge.rs b/src/cocoa_bridge.rs index f2d5f45..fe65533 100644 --- a/src/cocoa_bridge.rs +++ b/src/cocoa_bridge.rs @@ -2,8 +2,8 @@ use std::ffi::CString; use std::ptr; use std::slice; -use cocoa::base::nil; -use cocoa::foundation::{NSArray, NSAutoreleasePool, NSDictionary}; +// use cocoa::base::nil; +// use cocoa::foundation::{NSArray, NSAutoreleasePool, NSDictionary}; use libc::{c_char, size_t}; use {HeadphoneButton, MapGroup, MapKind}; @@ -12,28 +12,28 @@ use {HeadphoneButton, MapGroup, MapKind}; struct renameMeMapGroup { } -pub extern "C" fn parse_mappings() { - let sample_maps = "map k -map j"; - - let map_group = MapGroup::parse(sample_maps).unwrap(); - - unsafe { - let _pool = NSAutoreleasePool::new(nil); - - let maps = NSDictionary::init(nil).autorelease(); - let modes = NSDictionary::init(nil).autorelease(); - - for (trigger, action) in map_group.maps { - // let t = NSArray::arrayWithObjects(nil, &trigger).autorelease(); - - // maps. - } - - for (trigger, modes) in map_group.modes { - } - } -} +// pub extern "C" fn parse_mappings() { +// let sample_maps = "map k +// map j"; +// +// let map_group = MapGroup::parse(sample_maps).unwrap(); +// +// unsafe { +// let _pool = NSAutoreleasePool::new(nil); +// +// let maps = NSDictionary::init(nil).autorelease(); +// let modes = NSDictionary::init(nil).autorelease(); +// +// for (trigger, action) in map_group.maps { +// // let t = NSArray::arrayWithObjects(nil, &trigger).autorelease(); +// +// // maps. +// } +// +// for (trigger, modes) in map_group.modes { +// } +// } +// } // Different method: // Call Rust function with trigger @@ -97,7 +97,8 @@ pub extern "C" fn run_key_action( trigger: &[HeadphoneButton] ) -> Option { let sample_maps = "map k -map j"; +map j +map works!"; // Figure out how to persist this without re-parsing let map_group = MapGroup::parse(sample_maps).unwrap(); diff --git a/src/lib.rs b/src/lib.rs index cf7dd1e..3124178 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,4 @@ -extern crate cocoa; +// extern crate cocoa; #[macro_use] extern crate combine; diff --git a/src/parser.rs b/src/parser.rs index c6c8cce..1d9aa56 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -23,6 +23,7 @@ pub enum HeadphoneButton { type Trigger = Vec; type Action = String; +#[repr(C)] #[derive(Debug, PartialEq)] pub enum MapKind { Map, -- cgit v1.2.3