Expand description
spa-rs is a library who can embed all SPA web application files (dist static file), and release as a single binary executable.
It based-on axum and rust_embed
It reexported all axum module for convenient use.
Example
use spa_rs::spa_server_root;
use spa_rs::SpaServer;
use spa_rs::routing::{get, Router};
use anyhow::Result;
spa_server_root!("web/dist"); // specific your SPA dist file location
#[tokio::main]
async fn main() -> Result<()> {
let data = String::new(); // server context can be acccess by [axum::Extension]
let mut srv = SpaServer::new();
srv.port(3000)
.data(data)
.static_path("/png", "web") // static file generated in runtime
.route("/api", Router::new()
.route("/get", get(|| async { "get works" })
)
);
srv.run(spa_server_root!()).await?;
Ok(())
}Session
See session module for more detail.
Dev
When writing SPA application, you may want use hot-reload functionallity provided
by SPA framework. such as [vite dev] or [ng serve].
You can use spa-rs to reverse proxy all static requests to SPA framework. (need enable reverse-proxy feature)
Example
let forward_addr = "http://localhost:1234";
srv.reverse_proxy(forward_addr.parse()?);Modules
HTTP body utilities.
Error handling model and utilities
Types and traits for extracting data from requests.
Conditionally dispatch requests to the inner service based on the result of a predicate.
Async functions that can be used to handle requests.
Typed HTTP Headers
A general purpose library of common HTTP types
Utilities for writing middleware
Types and traits for generating responses.
A tower middleware who can reading and writing session data from Cookie.
Macros
Construct an ad-hoc error from a string or existing error value.
Specific SPA dist file root path in compile time
Structs
Errors that can happen when using axum.
Extractor and response for extensions.
The error type contains a status code and a string message.
JSON Extractor / Response.
The router type for composing handlers and services.
A listening HTTP server that accepts connections in both HTTP1 and HTTP2 by default.
A server wrapped axum server.
Extractor and response that works with typed header values from [headers].
Traits
Easily convert std::result::Result to HttpResult
A directory of binary assets.
Used to release static file into temp dir in runtime.
Type Definitions
Alias for a type-erased error type.
convenient return type when writing axum handler.