Yay templates
This commit is contained in:
parent
df77f814f5
commit
a888ec9a8a
841
Cargo.lock
generated
841
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -10,4 +10,10 @@ license = "AGPL-3.0-or-later"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
legion = "0.2.1"
|
legion = "0.2.1"
|
||||||
rand = "0.7.3"
|
rand = "0.7.3"
|
||||||
rocket = "0.4.4"
|
rocket = "0.4.4"
|
||||||
|
serde = { version = "1.0.111", features = ["derive"] }
|
||||||
|
|
||||||
|
[dependencies.rocket_contrib]
|
||||||
|
version = "0.4.5"
|
||||||
|
default-features = false
|
||||||
|
features = ["tera_templates"]
|
18
src/main.rs
18
src/main.rs
@ -2,19 +2,21 @@
|
|||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate rocket;
|
extern crate rocket;
|
||||||
|
extern crate serde;
|
||||||
|
|
||||||
mod simulation;
|
mod simulation;
|
||||||
|
|
||||||
use std::fmt::Write as FmtWrite;
|
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use rocket::State;
|
use rocket::State;
|
||||||
|
use rocket_contrib::templates::Template;
|
||||||
|
use serde::Serialize;
|
||||||
|
|
||||||
use simulation::{Object, Simulation};
|
use simulation::{Object, Simulation};
|
||||||
|
|
||||||
|
#[derive(Clone, Serialize)]
|
||||||
struct SimState {
|
struct SimState {
|
||||||
pub iteration: u64,
|
pub iteration: u64,
|
||||||
pub objects: Vec<Object>
|
pub objects: Vec<Object>
|
||||||
@ -23,18 +25,11 @@ struct SimState {
|
|||||||
type WrappedState = Arc<Mutex<SimState>>;
|
type WrappedState = Arc<Mutex<SimState>>;
|
||||||
|
|
||||||
#[get("/")]
|
#[get("/")]
|
||||||
fn index(sim: State<WrappedState>) -> String {
|
fn index(sim: State<WrappedState>) -> Template {
|
||||||
let state = sim.lock().unwrap();
|
let state = sim.lock().unwrap();
|
||||||
|
|
||||||
let mut result = String::from("Hello, world!\n");
|
|
||||||
|
|
||||||
write!(&mut result, "Iteration {}\n", (*state).iteration).unwrap();
|
Template::render("stuff", state.clone())
|
||||||
|
|
||||||
for object in &(*state).objects {
|
|
||||||
write!(&mut result, "Object {} at {}, {}\n", object.name, object.x, object.y).unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn simulation(s: WrappedState) {
|
fn simulation(s: WrappedState) {
|
||||||
@ -61,6 +56,7 @@ fn main() {
|
|||||||
simulation(Arc::clone(&state));
|
simulation(Arc::clone(&state));
|
||||||
|
|
||||||
rocket::ignite()
|
rocket::ignite()
|
||||||
|
.attach(Template::fairing())
|
||||||
.manage(Arc::clone(&state))
|
.manage(Arc::clone(&state))
|
||||||
.mount("/", routes![index])
|
.mount("/", routes![index])
|
||||||
.launch();
|
.launch();
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
use legion::prelude::*;
|
use legion::prelude::*;
|
||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
|
use serde::Serialize;
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
struct Name {
|
struct Name {
|
||||||
@ -22,6 +23,7 @@ pub struct Simulation {
|
|||||||
world: World
|
world: World
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Serialize)]
|
||||||
pub struct Object {
|
pub struct Object {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub x: f64,
|
pub x: f64,
|
||||||
|
14
templates/stuff.tera
Normal file
14
templates/stuff.tera
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Blab</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Hello, world!</h1>
|
||||||
|
<ul>
|
||||||
|
{% for object in objects %}
|
||||||
|
<li>{{ object.name }} @ {{ object.x }}, {{ object.y }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
x
Reference in New Issue
Block a user