doors

Crates.iodoors
lib.rsdoors
version0.8.1
sourcesrc
created_at2019-05-30 00:48:41.18394
updated_at2023-05-01 02:06:45.302906
descriptionAccess the illumos Doors API from Rust
homepage
repositoryhttps://github.com/robertdfrench/rusty-doors
max_upload_size
id137794
size84,964
Robert D. French (robertdfrench)

documentation

https://docs.rs/doors

README

Rusty Doors

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.

What are Doors?

A door is a file-like mechanism for interprocess communication, not unlike a named pipe or a UNIX Domain Socket. Client programs can invoke functions (called server procedures) in door servers if the door server has made a door available on the filesystem.

A server procedure is a function within the door server program that has a special, predefined signature. It is the entrypoint for the thread that is created (or awoken) to handle a client's door invocation.

A door server is a process that has created a door from one of its server procedures.

Example

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 response = client.call_with_data(&[111]).unwrap();
assert_eq!(response.data()[0], 222);

Acknowledgements

Commit count: 92

cargo fmt