Skip to content

stuarth/inertia-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

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,

  • Inertia<T>

    a Responder that's generic over T, the Inertia component's properties

  • VersionFairing

    Responsible for asset version checks. Constructed via VersionFairing::new, which is given the asset version and a closure responsible for generating the Inertia's HTML template.

Sample Rocket Server

#[macro_use]
extern crate rocket;

use inertia_rs::rocket::{Inertia, VersionFairing};
use rocket::response::Responder;
use rocket_dyn_templates::Template;

#[derive(serde::Serialize)]
struct Hello {
    some_property: String,
}

#[get("/hello")]
fn hello() -> Inertia<Hello> {
    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)
        }))
}

Releases

No releases published

Packages

No packages published

Languages