An open API service indexing awesome lists of open source software.

https://github.com/brson/basic-http-server

A simple static HTTP server in Rust, for learning and local doc development
https://github.com/brson/basic-http-server

Last synced: about 1 year ago
JSON representation

A simple static HTTP server in Rust, for learning and local doc development

Awesome Lists containing this project

README

          

# `basic-http-server`

A simple static HTTP server, for learning and local development.

`basic-http-server` is designed for two purposes:

- _as a teaching tool_. It is a simple and well-commented example of
basic [`tokio`], [`hyper`], and asynchronous Rust programming,
with `async` / `await`.

- _for local development_. It serves static HTML content, and with the `-x`
flag, provides convenience features useful for creating developer
documentation, including markdown rendering and directory listing.

The entire reference source for setting up a `hyper` HTTP server is contained in
[`main.rs`]. The [`ext.rs`] file contains developer extensions.

[`tokio`]: https://github.com/tokio-rs/tokio
[`hyper`]: https://github.com/hyperium/hyper
[`main.rs`]: src/main.rs
[`ext.rs`]: src/ext.rs

## Developer extensions

When passed the `-x` flag, `basic-http-server` enables additional conveniences
useful for developing documentation locally. Those extensions are:

- Rendering files with the ".md" extension as Markdown.

- Listing directories when no "index.html" file is found.

- Serving common source code files as "text/plain" so they are
rendered in the browser.

This makes `basic-http-server` useful for the following scenarios:

- Previewing markdown content. Draft your `README.md` changes and view them
locally before pushing to GitHub.

- Navigating to local documentation, including Rust API documentation. Just run
`basic-http-server -x` in your project directory, and use the directory
listing to navigate to `target/doc`, then find the crates to read from there
(`cargo doc` doesn't put an `index.html` file in `target/doc`).

## Installation and Use

**Note that `basic-http-server` is not production-ready and should not be
exposed to the internet. It is a learning and development tool.**

Install with `cargo install`:

```sh
$ cargo install basic-http-server
$ basic-http-server
```

To turn on the developer extensions, pass `-x`:

```sh
$ basic-http-server -x
```

To increase logging verbosity use `RUST_LOG`:

```sh
RUST_LOG=basic_http_server=trace basic-http-server -x
```

Command line arguments:

```
USAGE:
basic-http-server [FLAGS] [OPTIONS] [ARGS]

FLAGS:
-x Enable developer extensions
-h, --help Prints help information
-V, --version Prints version information

OPTIONS:
-a, --addr Sets the IP:PORT combination (default "127.0.0.1:4000")

ARGS:
ROOT Sets the root directory (default ".")

```

## License

MIT/Apache-2.0