aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTeddy Wing2018-08-23 10:22:14 +0200
committerTeddy Wing2018-08-23 10:27:16 +0200
commitba97dc5f57da049f9cada870000bffe556dec38a (patch)
treeaf047f423523cb3cfe1e88754c4bca4b1af1f425 /src
parentb33feb5c94bf346ddc5dee68c7bf8c6b039168db (diff)
downloaddome-key-map-ba97dc5f57da049f9cada870000bffe556dec38a.tar.bz2
cocoa_bridge: Continue outline of Objective C callable
Add some more structure to the function that will be called from Objective C code. * Give it a name, `parse_mappings` (not very thoroughly considered) * Initialise some Foundation data structures to mirror our Rust ones * Add the beginning of a struct that will be the ObjC version of our `MapGroup` struct, containing `NSDictionary`ies. * Move the `extern crate` into `lib.rs`, I keep forgetting that's where they go. * Add a test that just calls `parse_mappings` to check that the code compiles. parser::MapGroup: Make both its fields public to enable us to access them from `cocoa_bridge`. Used this helpful example as a reference for the Rust Cocoa code: https://github.com/servo/core-foundation-rs/blob/c99c05c/cocoa/examples/hello_world.rs
Diffstat (limited to 'src')
-rw-r--r--src/cocoa_bridge.rs32
-rw-r--r--src/lib.rs2
-rw-r--r--src/parser.rs4
3 files changed, 33 insertions, 5 deletions
diff --git a/src/cocoa_bridge.rs b/src/cocoa_bridge.rs
index 58d74d2..ea88661 100644
--- a/src/cocoa_bridge.rs
+++ b/src/cocoa_bridge.rs
@@ -1,13 +1,39 @@
-extern crate cocoa;
+use cocoa::base::nil;
+use cocoa::foundation::{NSArray, NSAutoreleasePool, NSDictionary};
use MapGroup;
-pub extern "C" fn x() {
+#[repr(C)]
+struct renameMeMapGroup {
+}
+
+pub extern "C" fn parse_mappings() {
let sample_maps = "map <up> k
map <down> j";
- let map_group = MapGroup::parse(sample_maps);
+ 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::array(nil).autorelease();
+ }
+
+ for (trigger, modes) in map_group.modes {
+ }
+ }
+}
+
+
+mod tests {
+ use super::*;
+
+ #[test]
+ fn parse_mappings_makes_cocoa_mappings() {
+ parse_mappings();
}
}
diff --git a/src/lib.rs b/src/lib.rs
index c2d2f9f..e6260ed 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,3 +1,5 @@
+extern crate cocoa;
+
#[macro_use]
extern crate combine;
diff --git a/src/parser.rs b/src/parser.rs
index a34edff..d5cd860 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -51,8 +51,8 @@ struct Mode {
#[derive(Debug, PartialEq)]
pub struct MapGroup {
- maps: MapCollection,
- modes: HashMap<Trigger, MapCollection>,
+ pub maps: MapCollection,
+ pub modes: HashMap<Trigger, MapCollection>,
}
#[derive(Debug, PartialEq)]