Inertia.rs

Current Crates.io Version Build Status docs.rs

Inertia.js implementations for Rust. Currently supports Rocket.

Why Inertia?

From inertiajs.com

Inertia is a new approach to building classic server-driven web apps. We call it the modern monolith.

Inertia allows you to create fully client-side rendered, single-page apps, without much of the complexity that comes with modern SPAs. It does this by leveraging existing server-side frameworks.

Inertia has no client-side routing, nor does it require an API. Simply build controllers and page views like you've always done!

Inertia.rs brings a straightforward integration to Rust.

Installation

Add the following line to your Cargo.toml toml inertia_rs = { version = "0.2.0", features = ["rocket"] }

Usage

inertia_rs defines a succinct interface for creating Inertia.js apps in Rocket. It's comprised of two elements,

Sample Rocket Server

```rust

[macro_use]

extern crate rocket;

use inertiars::rocket::{Inertia, VersionFairing}; use rocket::response::Responder; use rocketdyn_templates::Template;

[derive(serde::Serialize)]

struct Hello { some_property: String, }

[get("/hello")]

fn hello() -> Inertia { Inertia::response( // the component to render "hello", // the props to pass our component Hello { some_property: "hello world!".into() }, ) }

[launch]

fn rocket() -> _ { rocket::build() .mount("/", routes![hello]) .attach(Template::fairing()) // Version fairing is configured with current asset version, and a // closure to generate the html template response // ctx contains data_page, a json-serialized string of // the inertia props .attach(VersionFairing::new("1", |request, ctx| { Template::render("app", ctx).respond_to(request) })) }

```