The goal of this crate is to expose the illumos Doors API in Rust. It exposes the native doors API verbatim, and also provides some moderately safer abstractions.
A server procedure that simply doubles its input might look like this:
use doors::server::Door;
use doors::server::Request;
use doors::server::Response;
#[doors::server_procedure]
fn double(x: Request) -> Response<[u8; 1]> {
if x.data.len() > 0 {
return Response::new([x.data[0] * 2]);
} else {
// We were given nothing, and 2 times nothing is zero...
return Response::new([0]);
}
}
let door = Door::create(double).unwrap();
door.force_install("/tmp/double.door").unwrap();
A client program which invokes that server procedure might look something like this:
use doors::Client;
let client = Client::open("/tmp/double.door").unwrap();
let result = client.call_with_data(&[111]).unwrap();
assert_eq!(result.data()[0], 222);
Run make tests
to run the unit tests, and run make all
to run the
full build pipeline.
- The social media preview image is due to Jim Choate under the terms of CC BY-NC 2.0.
- This work preceeds, but was reignited by oxidecomputer/rusty-doors.