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
|
#![doc = include_str!("../README.md")]
|
||||||
//! in a web server
|
|
||||||
use std::convert::Infallible;
|
use std::convert::Infallible;
|
||||||
|
|
||||||
use axum::{
|
use axum::{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user