Añade Sycamore para render de HTML con reactividad

This commit is contained in:
Manuel Cillero 2022-02-10 23:15:50 +01:00
parent 13a408ce61
commit e1ea149988
3 changed files with 13 additions and 5 deletions

View file

@ -25,6 +25,7 @@ categories = [
[dependencies] [dependencies]
actix-web = "4.0.0-rc.3" actix-web = "4.0.0-rc.3"
sycamore = { version = "0.8.0-beta.2", features = ["ssr"] }
[lib] [lib]
name = "pagetop" name = "pagetop"

View file

@ -1,15 +1,22 @@
use crate::core::{server, Server}; use crate::core::{server, Server};
async fn greet(req: server::HttpRequest) -> impl server::Responder { async fn greet() -> impl server::Responder {
let name = req.match_info().get("name").unwrap_or("World"); "Hello!"
format!("Hello {}!", &name) }
async fn greet_with_param(req: server::HttpRequest) -> server::HttpResponse {
let name: String = req.match_info().get("name").unwrap_or("World").into();
server::HttpResponse::Ok()
.body(sycamore::render_to_string(|ctx| sycamore::view! { ctx,
p { "Hello " (name) "!" }
}))
} }
pub fn run() -> Result<Server, std::io::Error> { pub fn run() -> Result<Server, std::io::Error> {
let server = server::HttpServer::new(|| { let server = server::HttpServer::new(|| {
server::App::new() server::App::new()
.route("/", server::web::get().to(greet)) .route("/", server::web::get().to(greet))
.route("/{name}", server::web::get().to(greet)) .route("/{name}", server::web::get().to(greet_with_param))
}) })
.bind("127.0.0.1:8000")? .bind("127.0.0.1:8000")?
.run(); .run();

View file

@ -1,4 +1,4 @@
pub use actix_web::{web, App, HttpRequest, HttpServer, Responder}; pub use actix_web::{web, App, HttpRequest, HttpResponse, HttpServer, Responder};
mod main; mod main;
pub use main::run; pub use main::run;