docs: create README.md and crate docs in lib.rs
This commit is contained in:
parent
57f5404fde
commit
78577d55e8
90
README.md
90
README.md
@ -1 +1,89 @@
|
||||
# static-serve
|
||||
# Static Serve
|
||||
|
||||
A Rust library for compressing and embedding static assets in a web server using [Axum](https://github.com/tokio-rs/axum). This crate provides efficient asset embedding with optional compression (`gzip` and `zstd`) and conditional requests support.
|
||||
|
||||
## Features
|
||||
|
||||
- **Embed static assets** at compile-time for efficient serving
|
||||
|
||||
- **Automatic compression** with `gzip` and `zstd`
|
||||
|
||||
- **ETag support** for conditional requests and caching
|
||||
|
||||
- **Seamless Axum integration** with request extraction for encoding and caching headers
|
||||
|
||||
## Installation
|
||||
|
||||
Add the following to your `Cargo.toml`:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
static-serve = "0.1"
|
||||
axum = "0.8"
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Embedding Static Assets
|
||||
|
||||
Use the `embed_assets!` macro to create a `static_router()` function in scope which will include your static files, embedding them into your binary:
|
||||
|
||||
```rust
|
||||
use static_serve::embed_assets;
|
||||
|
||||
embed_assets!("assets", compress = true);
|
||||
let router = static_router();
|
||||
```
|
||||
|
||||
This will:
|
||||
|
||||
- Include all files from the `assets` directory
|
||||
- Compress them using `gzip` and `zstd` (if beneficial)
|
||||
- Generate a `static_router()` function to serve these assets
|
||||
|
||||
### Conditional Requests & Caching
|
||||
|
||||
The crate automatically handles:
|
||||
- `Accept-Encoding` header to serve compressed versions if available
|
||||
- `If-None-Match` header for ETag validation, returning `304 Not Modified` if unchanged
|
||||
|
||||
### Required parameter
|
||||
|
||||
- `path_to_dir` - a valid Rust identifier or `&str` of the path to the static files to be included
|
||||
|
||||
### Optional parameters
|
||||
|
||||
- `compress = false` - compress static files with zstd and gzip, true or false (defaults to false)
|
||||
|
||||
- `ignore_dirs = [my_ignore_dir, other_ignore_dir]` - a bracketed list of valid Rust identifiers or `&str`s of the paths/subdirectories inside the target directory, which should be ignored and not included. (If this parameter is missing, no subdirectories will be ignored)
|
||||
|
||||
## Example
|
||||
|
||||
```rust
|
||||
|
||||
use axum::{Router, Server};
|
||||
use static_serve::embed_assets;
|
||||
|
||||
embed_assets!("public", compress = true);
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let router = static_router();
|
||||
Server::bind(&"0.0.0.0:3000".parse().unwrap())
|
||||
.serve(router.into_make_service())
|
||||
.await
|
||||
.unwrap();
|
||||
}
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
Licensed under either of
|
||||
- Apache License, Version 2.0, (LICENSE-APACHE or [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0))
|
||||
- MIT license (LICENSE-MIT or [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT))
|
||||
|
||||
at your option.
|
||||
|
||||
### Contribution
|
||||
|
||||
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
|
||||
|
84
static-serve/README.md
Normal file
84
static-serve/README.md
Normal file
@ -0,0 +1,84 @@
|
||||
# Static Serve
|
||||
|
||||
A Rust library for compressing and embedding static assets in a web server using [Axum](https://github.com/tokio-rs/axum). This crate provides efficient asset embedding with optional compression (`gzip` and `zstd`) and conditional requests support.
|
||||
|
||||
## Features
|
||||
|
||||
- **Embed static assets** at compile-time for efficient serving
|
||||
- **Automatic compression** with `gzip` and `zstd`
|
||||
- **ETag support** for conditional requests and caching
|
||||
- **Seamless Axum integration** with request extraction for encoding and caching headers
|
||||
|
||||
## Installation
|
||||
|
||||
Add the following to your `Cargo.toml`:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
static-serve = "0.1"
|
||||
axum = "0.8"
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Embedding Static Assets
|
||||
|
||||
Use the `embed_assets!` macro to create a `static_router()` function in scope which will include your static files, embedding them into your binary:
|
||||
|
||||
```rust,ignore
|
||||
use static_serve::embed_assets;
|
||||
|
||||
embed_assets!("assets", compress = true);
|
||||
let router = static_router();
|
||||
```
|
||||
|
||||
This will:
|
||||
|
||||
- Include all files from the `assets` directory
|
||||
- Compress them using `gzip` and `zstd` (if beneficial)
|
||||
- Generate a `static_router()` function to serve these assets
|
||||
|
||||
### Conditional Requests & Caching
|
||||
|
||||
The crate automatically handles:
|
||||
- `Accept-Encoding` header to serve compressed versions if available
|
||||
- `If-None-Match` header for ETag validation, returning `304 Not Modified` if unchanged
|
||||
|
||||
### Required parameter
|
||||
|
||||
- `path_to_dir` - a valid Rust identifier or `&str` of the path to the static files to be included
|
||||
|
||||
### Optional parameters
|
||||
|
||||
- `compress = false` - compress static files with zstd and gzip, true or false (defaults to false)
|
||||
- `ignore_dirs = [my_ignore_dir, other_ignore_dir]` - a bracketed list of valid Rust identifiers or `&str`s of the paths/subdirectories inside the target directory, which should be ignored and not included. (If this parameter is missing, no subdirectories will be ignored)
|
||||
|
||||
## Example
|
||||
|
||||
```rust,ignore
|
||||
use axum::{Router, Server};
|
||||
use static_serve::embed_assets;
|
||||
|
||||
embed_assets!("public", compress = true);
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let router = static_router();
|
||||
Server::bind(&"0.0.0.0:3000".parse().unwrap())
|
||||
.serve(router.into_make_service())
|
||||
.await
|
||||
.unwrap();
|
||||
}
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
Licensed under either of
|
||||
- Apache License, Version 2.0, (LICENSE-APACHE or [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0))
|
||||
- MIT license (LICENSE-MIT or [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT))
|
||||
|
||||
at your option.
|
||||
|
||||
### Contribution
|
||||
|
||||
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
|
1
static-serve/clippy.toml
Normal file
1
static-serve/clippy.toml
Normal file
@ -0,0 +1 @@
|
||||
doc-valid-idents = ["ETag", ".."]
|
@ -1,5 +1,5 @@
|
||||
//! Crate for compressing and embedding static assets
|
||||
//! in a web server
|
||||
#![doc = include_str!("../README.md")]
|
||||
|
||||
use std::convert::Infallible;
|
||||
|
||||
use axum::{
|
||||
|
Loading…
x
Reference in New Issue
Block a user