aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.rs
AgeCommit message (Collapse)Author
2018-09-01parser: Make `Trigger` private againTeddy Wing
This was added for a432dd2824499959635ac9a7cabec25a31dddb14, but since we didn't end up using it, we can revert this. Might end up making the type public again later, but for now it doesn't need to be.
2018-09-01KeyActionResult: Make a pseudo-builder for the struct (WIP)Teddy Wing
Make a builder for a new `KeyActionResult`, but without a new "builder" type (seems like I should be able to get away without one in this simple case). I had make `parser::Trigger` public because at first I was using them in `KeyActionResult` for the `in_mode` field. Oh yeah, there's a new `in_mode` field on `KeyActionResult`. We'll be using that to store and pass back the current mode to our FFI caller. This field can be used to call `c_run_key_action()` with that mode scope. Well, the idea is here, but I'm getting move errors: error[E0507]: cannot move out of borrowed content --> src/cocoa_bridge.rs:79:9 | 79 | *self | ^^^^^ cannot move out of borrowed content error[E0596]: cannot borrow immutable borrowed content as mutable --> src/cocoa_bridge.rs:162:30 | 162 | *KeyActionResult::new(MapKind::Map) | ______________________________^ 163 | | .with_action(&map.action) | |_________________________________________________________^ cannot borrow as mutable error[E0507]: cannot move out of borrowed content --> src/cocoa_bridge.rs:162:29 | 162 | / *KeyActionResult::new(MapKind::Map) 163 | | .with_action(&map.action) 164 | | .in_mode(trigger) | |_________________________________________________^ cannot move out of borrowed content Looks like I'll need to change the `KeyActionResult` impl code to pass by value instead of reference. Committing what I have now, though, because it's been a while and it's become kind of a mess.
2018-08-26Link library with a test C programTeddy Wing
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.
2018-08-25Configure for importing from C/FFITeddy Wing
* Add `#[repr(C)]` on `HeadphoneButton` to hopefully be able to use it outside Rust * Add `#[no_mangle]` to `run_key_action()` * Export `run_key_action()` as a public function * Build the crate as a static library (But holy cow, a 19 MB library file?)
2018-08-23cocoa_bridge: Continue outline of Objective C callableTeddy Wing
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
2018-08-22Add `MapGroup::parse()`; Start Cocoa functionTeddy Wing
Add a new `cocoa` module which will hold code to be called from Objective-C. Currently contains a sketch of a function that will be called via FFI from Objective-C. Haven't thought of a name for it yet. For now contains a sample map definition "file" in a hard-coded string. Tells `MapGroup` to parse the map definitions. Will try to create some Cocoa objects in the `unsafe` block. `MapGroup`: Add `parse()` method. Given a map definition string, this new function will parse the string into a `MapGroup` and return the result. It will serve as the entry point to parsing DomeKey map definitions. Thanks to these references for Combine parser error handling: - https://github.com/ordian/toml_edit/blob/b02bc3/src/parser/document.rs - https://github.com/ordian/toml_edit/blob/ee6895f/src/parser/errors.rs - https://github.com/Marwes/combine/blob/54bcfed/examples/ini.rs
2018-08-22Move all code in `lib.rs` to `parser.rs`Teddy Wing
Put our parsing code in its own module. We'll be creating a new `cocoa` module and doing this allows us to keep `lib` free as a module container.