1 unstable release
0.1.0 | Dec 17, 2023 |
---|
#4 in #serve-file
6,826 downloads per month
2.5MB
930 lines
axum_embed
is a library that provides a service for serving embedded files using the axum
web framework.
This library uses the rust_embed
crate to embedded files into the binary at compile time, and the axum
crate to serve these files over HTTP.
Features
- Serve embedded files over HTTP
- Customizable 404, fallback, and index files
- Response compressed files if the client supports it and the compressed file exists
- Response 304 if the client has the same file (based on ETag)
- Redirect to the directory if the client requests a directory without a trailing slash
Example
use rust_embed::RustEmbed;
use axum_embed::ServeEmbed;
use tokio::net::TcpListener;
#[derive(RustEmbed, Clone)]
#[folder = "examples/assets/"]
struct Assets;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
let serve_assets = ServeEmbed::<Assets>::new();
let app = axum::Router::new().nest_service("/", serve_assets);
axum::serve(listener, app).await?;
Ok(())
}
Usage
Please see the examples directory for a working example.
Serve compressed file
The axum_embed
library has the capability to serve compressed files, given that the client supports it and the compressed file is available.
The compression methods supported include br
(Brotli), gzip
, and deflate
.
If the client supports multiple compression methods, axum_embed
will select the first one listed in the Accept-Encoding
header. Please note that the weight of encoding is not considered in this ction.
In the absence of client support for any compression methods, axum_embed
will serve the file in its uncompressed form.
If a file with the extension .br
(for Brotli), .gz
(for GZip), or .zz
(for Deflate) is available, axum_embed
will serve the file in its compressed form.
An uncompressed file is must be available for the compressed file to be served.
Dependencies
~4–11MB
~115K SLoC