tros 0.2.0

Your tros from tarantool TX thread to tokio(..and others!)
Documentation
# `tros` - your tros to tokio(...and others)

## Introduction

`Tros` is an off line tarantool executor.
It is your bridge from TX thread to ordinary external threads - namely, to the `tokio` runtime.
To get a quick glimpse of what it offers, lets make an async HTTP request with it:

```rust
let text = TokioExecutor::new(PicodataTransport::default())
            .exec(async { reqwest::get("http://example.com").await?.text().await })
            .unwrap()
            .unwrap();
assert!(text.contains("Example Domain"))
```

Internally it would go through the following steps:

1. Create `tokio` runtime if it doesn't exist yet;
2. Start future execution on the runtime;
3. Receive future's result through the underlying channel. Result awaiting scheme depends on the transport used.

## Get started

1. To get started, first understand what tarantool version you are using.
   You can do it via `tarantool --version`.

   1. If it says `picodata` somewhere, then you are using our [fork]https://github.com/picodata/tarantool, which means we can give you some optimizations, congrats! 🥳

   1. If it doesn't say `picodata`, then you are on vanilla tarantool.

1. Then take a look at the table below to pick needed features and items:

   | TT Version    | Cargo feature | What it enables     |
   | ------------- | ------------- | ------------------- |
   | Picodata fork | `picodata`    | `PicodataTransport` |
   | Vanilla       | `vanilla`     | `VanillaTransport`  |

1. Install `tros` with the needed feature by adding it to `Cargo.toml`, for example: `tros = { version = "0.1.0", features = [ "picodata" ] }`

1. Use enabled transports in your code, for example:
   1. For picodata: `TokioExecutor::new(PicodataTransport::default()).exec(...)`;
   1. For vanilla: `TokioExecutor::new(VanillaTransport::default()).exec(...)`;

## Details

### Transports

Normally you should not choose transport yourself.
Just pick a suitable feature as described [above](#get-started) and you are good to go with the automatically selected transport.

If you are indeed interested in the underlying transport details, take a look at transport comparison table:

| Type            | Description                                                                       | Pros                                                                                                                                         | Cons                                                                                                                                                                            |
| --------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CBusTransport` | It uses `CBus` oneshot channel to receive job result.                             | As it uses `CBus` channel, it is very efficient: it simply puts current fiber to sleep and, as a result, doesn't waste additional resources. | For the moment of writing, it is only available in the [picodata fork]https://github.com/picodata/tarantool. There is an ongoing effort to push `CBus` patch to the upstream. |
| `PollTransport` | It polls underlying channel with the configurable interval to receive job result. | It is available in all modern tarantool versions.                                                                                            | As it polls channel with some interval, it is not very efficient.                                                                                                               |

## Examples

Examples are placed in `example` crate. To simplify their execution, each example is just tarantool test.
To run and check examples, install `tarantool-test` binary and run `make run-examples`.