HTTP integration with actix-web

The "http_tide" feature flag should be toggled on to enable HTTP integration with tide. Enabling "http_tide" feature flag will also enable the "async_std_runtime" feature flag.

A convenience method Server::handle_http(self) is available when "http_tide" is the only http integration flag that is enabled. If multiple http integration feature flags are enabled, you can use Server::into_endpoint(self) method instead.

We will demonstrate the usage with a new example.

[dependencies]
tide = "0.16.0"
async-std = { version = "1", features = [ "attributes", ] }  
toy-rpc = { version = "0.7.5", features = ["http_tide", "server"] }
use std::sync::Arc;
use toy_rpc::macros::export_impl;
use toy_rpc::Server;
use tide::prelude::*;

pub struct Calculator { }

#[export_impl]
impl Calculator {
    #[export_method]
    async fn multiply(&self, args(i32, i32)) -> Result<i32, String> {
        Ok(args.0 * args.1)
    }

    #[export_method]
    async fn divide(&self, args(i32, i32)) -> Result<i32, String> {
        Ok(args.0 / args.1)
    }
}

#[async_std::main]
async fn main() {
    // Get the RPC server ready
    let addr = "127.0.0.1:23333";
    let calculator = Arc::new(Calculator { });
    let server = Server::builder()
        .register(calculator)
        .build();

    // Now we will work with `tide` HTTP server
    let mut app = tide::new();
    app.at("/rpc/").nest(server.handle_http());
    app.listen(addr).await.unwrap();
}