spa-rs 0.3.1

Embed all SPA web application files and release as a single binary executable.
Documentation
# spa-rs


[documentation](https://docs.rs/spa-rs)

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](https://docs.rs/axum/latest/axum/) and [rust_embed](https://docs.rs/rust-embed/latest/rust_embed/)

It reexported all axum module for convenient use.
## Example

```rust
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

```rust
  let forward_addr = "http://localhost:1234";
  srv.reverse_proxy(forward_addr.parse()?);
```