Crate spirit_tokio[][src]

A collection of helpers integrating tokio primitives into spirit

The crate provides few helper implementations that handle listening socket auto-reconfiguration based on configuration.

Examples

extern crate failure;
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate spirit;
extern crate spirit_tokio;
extern crate tokio;

use std::sync::Arc;

use failure::Error;
use spirit::{Empty, Spirit};
use spirit_tokio::TcpListen;
use tokio::net::TcpStream;
use tokio::prelude::*;

const DEFAULT_CONFIG: &str = r#"
[listening_socket]
port = 1234
"#;
#[derive(Default, Deserialize)]
struct Config {
    listening_socket: TcpListen,
}

impl Config {
    fn listening_socket(&self) -> TcpListen {
        self.listening_socket.clone()
    }
}

fn connection(_: &Arc<Spirit<Empty, Config>>, conn: TcpStream, _: &Empty)
    -> impl Future<Item = (), Error = Error>
{
    tokio::io::write_all(conn, "Hello\n")
        .map(|_| ())
        .map_err(Error::from)
}

fn main() {
    Spirit::<Empty, Config>::new()
        .config_defaults(DEFAULT_CONFIG)
        .config_helper(Config::listening_socket, connection, "Listener")
        .run(|spirit| {
            Ok(())
        });
}

Further examples are in the git repository.

Structs

Listen

A description of listening interface and port.

Scale

A scaling configuration provided by user.

Singleton

Turns scaling off and provides a single instance.

Task

An inner tokio task helper.

TcpListen

A configuration fragment of a TCP listening socket.

UdpListen

A configuration fragment describing a bound UDP socket.

Enums

Runtime

A helper to initialize a tokio runtime as part of spirit.

Traits

ResourceMaker

An alternative (more concrete) trait to IteratedCfgHelper for futures/tokio integration.

Scaled

Description of scaling into multiple tasks.

Type Definitions

TokioBody

A body run on tokio runtime.