fire-http 0.5.0

Http async library based on hyper and tokio
Documentation
use fire::fs::StaticFiles;
use fire::Body;
use fire_http as fire;

#[macro_use]
mod util;

#[tokio::test]
async fn read_file() {
	// build route
	const CSS: StaticFiles = StaticFiles::new("/css", "./examples/www/css");

	let addr = spawn_server!(|builder| {
		builder.add_route(CSS);
	});

	make_request!("GET", addr, "/css")
		.await
		// folder should be not found
		.assert_status(404)
		.assert_not_header("cache-control")
		.assert_not_header("content-type")
		.assert_header("content-length", "0");

	let file_ctn = include_str!("./../examples/www/css/style.css");
	let res = make_request!("GET", addr, "/css/style.css")
		.await
		.assert_status(200)
		.assert_header("content-length", file_ctn.len().to_string())
		.assert_header("content-type", "text/css; charset=utf-8")
		// 86400 = 60 * 60 * 24
		.assert_header("cache-control", "max-age=86400, public");

	let etag = res.header("etag").expect("etag not found");

	make_request!("GET", addr, "/css/style.css", |req| {
		req.header("if-none-match", etag)
			.body(Body::new().into_http_body())
			.expect("could not build request")
	})
	.await
	.assert_status(304)
	.assert_header("cache-control", "max-age=86400, public")
	.assert_not_header("content-type");
}