http-service

Types and traits to help you implement your own HTTP server


Crates.io version Build Status Download docs.rs docs

API Docs | Chat

Built with ⛵ by The Rust Async Ecosystem WG

About

The crate http-service provides the necessary types and traits to implement your own HTTP Server. It uses hyper for the lower level TCP abstraction.

You can use the workspace member http-service-hyper to run your HTTP Server.

  1. Runs via http_service_hyper::run(HTTP_SERVICE, ADDRESS);
  2. Returns a future which can be awaited via http_service_hyper::serve(HTTP_SERVICE, ADDRESS);

This crate uses the latest Futures preview, and therefore needs to be run on Rust Nightly.

Examples

Cargo.toml ``` [dependencies] http-service = "0.1.5" futures-preview = "0.3.0-alpha.14"

[dependencies.http-service-hyper] version = "0.1.1" ```

main.rs ```rust

![feature(futuresapi, asyncawait, awaitmacro, existentialtype)]

use futures::future::{self, FutureObj}; use http_service::{HttpService, Response}; use std::net::{IpAddr, Ipv4Addr, SocketAddr};

struct Server { message: Vec, }

impl Server { fn create(message: Vec) -> Server { Server { message } }

pub fn run(s: Server) {
    let a = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);
    http_service_hyper::run(s, a);
}

}

impl HttpService for Server { type Connection = (); type ConnectionFuture = future::Ready>; type Fut = FutureObj<'static, Result>;

fn connect(&self) -> Self::ConnectionFuture {
    future::ok(())
}

fn respond(&self, _conn: &mut (), _req: http_service::Request) -> Self::Fut {
    let message = self.message.clone();
    FutureObj::new(Box::new(async move {
        Ok(Response::new(http_service::Body::from(message)))
    }))
}

}

fn main() { let s = Server::create(String::from("Hello, World").into_bytes()); Server::run(s); } ```

License

MIT OR Apache-2.0