rsocket_rust 0.1.5

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

[![Crates.io](https://img.shields.io/crates/v/rsocket_rust)](https://crates.io/crates/rsocket_rust)
[![Crates.io](https://img.shields.io/crates/d/rsocket_rust)](https://crates.io/crates/rsocket_rust)
[![License](https://img.shields.io/github/license/rsocket/rsocket-rust.svg)](https://github.com/rsocket/rsocket-rust/blob/master/LICENSE)
[![GitHub Release](https://img.shields.io/github/release-pre/rsocket/rsocket-rust.svg)](https://github.com/rsocket/rsocket-rust/releases)

> 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

```rust
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

```rust
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

- [tokio]https://tokio.rs/
- [futures-rs]http://rust-lang-nursery.github.io/futures-rs/

## TODO

- Operations
  - [x] METADATA_PUSH
  - [x] REQUEST_FNF
  - [x] REQUEST_RESPONSE
  - [x] REQUEST_STREAM
  - [ ] REQUEST_CHANNEL
- Transport
  - [x] TCP
  - [ ] Websocket
- Reactor
  - [ ] ...
- High Level APIs
  - [ ] Client
  - [ ] Server