rsocket_rust 0.1.5

rsocket-rust is an implementation of the RSocket protocol in Rust.
Documentation

rsocket-rust

Crates.io Crates.io License GitHub Release

rsocket-rust is an implementation of the RSocket protocol in Rust. It's an alpha version and still under active development. Do not use it in a production environment!

Example

Here are some example codes which show how RSocket works in Rust.

Server

extern crate bytes;
extern crate futures;
extern crate rsocket_rust;

use bytes::Bytes;
use futures::prelude::*;
use rsocket_rust::prelude::*;

#[test]
fn test_serve() {
  RSocketFactory::receive()
    .transport(URI::Tcp("127.0.0.1:7878"))
    .acceptor(|setup, sending_socket| {
      println!("accept setup: {:?}", setup);
      // TODO: use tokio runtime?
      std::thread::spawn(move || {
        let resp = sending_socket
          .request_response(
            Payload::builder()
              .set_data(Bytes::from("Hello Client!"))
              .build(),
          )
          .wait()
          .unwrap();
        println!(">>>>> response success: {:?}", resp);
      });
      Box::new(MockResponder)
    })
    .serve()
    .wait()
    .unwrap();
}

Client

extern crate futures;
extern crate rsocket_rust;

use futures::prelude::*;
use rsocket_rust::prelude::*;

#[test]
fn test_client() {
  let cli = RSocketFactory::connect()
    .acceptor(||Box::new(MockResponder))
    .transport(URI::Tcp("127.0.0.1:7878"))
    .setup(Payload::from("READY!"))
    .mime_type("text/plain", "text/plain")
    .start()
    .unwrap();
  let pa = Payload::builder()
    .set_data_utf8("Hello World!")
    .set_metadata_utf8("Rust!")
    .build();
  let resp = cli.request_response(pa).wait().unwrap();
  println!("******* response: {:?}", resp);
}

Dependencies

TODO

  • Operations
    • METADATA_PUSH
    • REQUEST_FNF
    • REQUEST_RESPONSE
    • REQUEST_STREAM
    • REQUEST_CHANNEL
  • Transport
    • TCP
    • Websocket
  • Reactor
    • ...
  • High Level APIs
    • Client
    • Server