Skip to content

Commit

Permalink
0.1.27: bump hyper to 1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
btwiuse committed Nov 28, 2023
1 parent a7c1d8b commit 0ab2cf6
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 21 deletions.
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "cargo-docs"
version = "0.1.26"
version = "0.1.27"
authors = [
"Btwiuse Arch <btwiuse@gmail.com>",
]
Expand Down Expand Up @@ -29,7 +29,6 @@ anyhow = "1"
cargo = "0.75"
cargo-util = "0.2"
clap = { version = "4", features = ["derive", "env"] }
dirs = "5"
futures-util = "0.3"
http = "1.0"
hyper = { version = "1.0", features = ["full"] }
Expand All @@ -41,6 +40,7 @@ log = "0.4"
lg = "0.1"
dialoguer = "0.11"
port-selector = "0.1"
hyper-util = { version = "0.1.1", features = ["full"] }

[badges]
travis-ci = { repository = "btwiuse/cargo-docs", branch = "master" }
Expand Down
62 changes: 43 additions & 19 deletions lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,17 @@ use cargo::ops::{compile_with_exec, CompileOptions};
use cargo::util::config::{homedir, Config};
use cargo::util::errors::CargoResult;
use cargo_util::ProcessBuilder;
use futures_util::future;
use http::response::Builder as ResponseBuilder;
use http::{header, StatusCode};
use hyper::server::Server;
use hyper::service::{make_service_fn, service_fn};
use hyper::{Body, Request, Response};
use hyper::server::conn::http1;
use hyper::service::service_fn;
use hyper::{Request, Response};
use hyper_staticfile::Body;
use hyper_staticfile::Static;
use hyper_util::rt::tokio::TokioIo;
use std::path::PathBuf;
use std::sync::Arc;
use tokio::net::TcpListener;

/// run `cargo doc` with extra args
#[allow(dead_code)]
Expand Down Expand Up @@ -57,7 +59,7 @@ pub async fn handle_crate_request<B>(
"/" => Ok(ResponseBuilder::new()
.status(StatusCode::FOUND)
.header(header::LOCATION, target)
.body(Body::empty())
.body(Body::Empty)
.expect("unable to build response")),
_ => static_.clone().serve(req).await,
}
Expand Down Expand Up @@ -127,15 +129,25 @@ pub async fn serve_crate_doc(
addr: &std::net::SocketAddr,
) -> Result<(), anyhow::Error> {
let (crate_name, crate_doc_dir) = get_crate_info(manifest_path)?;
let handler = make_service_fn(|_| {
let crate_doc_dir = Static::new(crate_doc_dir.clone());
let crate_name = crate_name.clone();
future::ok::<_, hyper::Error>(service_fn(move |req| {
handle_crate_request(req, crate_doc_dir.clone(), crate_name.clone())
}))
});

Ok(Server::bind(addr).serve(handler).await?)
let crate_doc_dir = Static::new(crate_doc_dir.clone());
let crate_name = crate_name.clone();
let handler =
service_fn(move |req| handle_crate_request(req, crate_doc_dir.clone(), crate_name.clone()));

let listener = TcpListener::bind(addr)
.await
.expect("Failed to create TCP listener");

loop {
let (tcp, _) = listener.accept().await?;
let io = TokioIo::new(tcp);
let service = handler.clone();
tokio::task::spawn(async move {
if let Err(err) = http1::Builder::new().serve_connection(io, service).await {
println!("Failed to serve connection: {:?}", err);
}
});
}
}

/// find rust book location
Expand Down Expand Up @@ -186,9 +198,21 @@ pub async fn serve_rustbook(addr: &std::net::SocketAddr) -> Result<(), anyhow::E
/// serve `dir` on `addr`
#[allow(dead_code)]
pub async fn serve_dir(dir: &PathBuf, addr: &std::net::SocketAddr) -> Result<(), anyhow::Error> {
let handler = make_service_fn(|_| {
let dir = Static::new(dir.clone());
future::ok::<_, hyper::Error>(service_fn(move |req| handle_request(req, dir.clone())))
});
Ok(Server::bind(addr).serve(handler).await?)
let dir = Static::new(dir.clone());
let handler = service_fn(move |req| handle_request(req, dir.clone()));

let listener = TcpListener::bind(addr)
.await
.expect("Failed to create TCP listener");

loop {
let (tcp, _) = listener.accept().await?;
let io = TokioIo::new(tcp);
let service = handler.clone();
tokio::task::spawn(async move {
if let Err(err) = http1::Builder::new().serve_connection(io, service).await {
println!("Failed to serve connection: {:?}", err);
}
});
}
}

0 comments on commit 0ab2cf6

Please sign in to comment.