From 13a408ce611b613daa869c1b8057c7daec7892de Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Thu, 10 Feb 2022 23:12:53 +0100 Subject: [PATCH] =?UTF-8?q?A=C3=B1ade=20el=20servidor=20web=20actix-web?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 35 +++++++++++++++++++++++++++++++++++ STARTER.Cargo.toml | 14 ++++++++++++++ src/core/mod.rs | 3 +++ src/core/server/main.rs | 17 +++++++++++++++++ src/core/server/mod.rs | 4 ++++ src/lib.rs | 3 +++ src/main.rs | 6 ++++++ tests/health_check.rs | 9 +++++++++ tests/main.rs | 1 + 9 files changed, 92 insertions(+) create mode 100644 Cargo.toml create mode 100644 STARTER.Cargo.toml create mode 100644 src/core/mod.rs create mode 100644 src/core/server/main.rs create mode 100644 src/core/server/mod.rs create mode 100644 src/lib.rs create mode 100644 src/main.rs create mode 100644 tests/health_check.rs create mode 100644 tests/main.rs diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 00000000..e29ba8be --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "pagetop" +version = "0.0.0" +edition = "2021" + +authors = [ + "Manuel Cillero " +] +description = """\ + PageTop es un proyecto personal para aprender Rust. Incluye algunos de los \ + crates más estables y populares para desarrollar soluciones web modulares, \ + extensibles y configurables. También es un sistema para la gestión de \ + contenidos web.\ +""" +homepage = "https://suitepro.cillero.es/projects/pagetop" +repository = "https://gitlab.com/manuelcillero/pagetop" +license = "MIT" + +keywords = [ + "web", "cms", "framework", "frontend", "ssr" +] +categories = [ + "web-programming", "development-tools", "gui" +] + +[dependencies] +actix-web = "4.0.0-rc.3" + +[lib] +name = "pagetop" +path = "src/lib.rs" + +[[bin]] +name = "pagetop" +path = "src/main.rs" diff --git a/STARTER.Cargo.toml b/STARTER.Cargo.toml new file mode 100644 index 00000000..4795fde9 --- /dev/null +++ b/STARTER.Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "app" +version = "0.1.0" +edition = "2021" + +# Ver más claves y sus definiciones en +# https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +pagetop = { path = "pagetop" } +actix-web = "4.0.0-rc.3" + +[[bin]] +name = "app" diff --git a/src/core/mod.rs b/src/core/mod.rs new file mode 100644 index 00000000..fc3e282f --- /dev/null +++ b/src/core/mod.rs @@ -0,0 +1,3 @@ +pub use actix_web::dev::Server; + +pub mod server; diff --git a/src/core/server/main.rs b/src/core/server/main.rs new file mode 100644 index 00000000..022d32d1 --- /dev/null +++ b/src/core/server/main.rs @@ -0,0 +1,17 @@ +use crate::core::{server, Server}; + +async fn greet(req: server::HttpRequest) -> impl server::Responder { + let name = req.match_info().get("name").unwrap_or("World"); + format!("Hello {}!", &name) +} + +pub fn run() -> Result { + let server = server::HttpServer::new(|| { + server::App::new() + .route("/", server::web::get().to(greet)) + .route("/{name}", server::web::get().to(greet)) + }) + .bind("127.0.0.1:8000")? + .run(); + Ok(server) +} diff --git a/src/core/server/mod.rs b/src/core/server/mod.rs new file mode 100644 index 00000000..f293ee80 --- /dev/null +++ b/src/core/server/mod.rs @@ -0,0 +1,4 @@ +pub use actix_web::{web, App, HttpRequest, HttpServer, Responder}; + +mod main; +pub use main::run; diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 00000000..48a67efc --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,3 @@ +pub mod core; + +pub use actix_web::main; diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 00000000..db2a29bc --- /dev/null +++ b/src/main.rs @@ -0,0 +1,6 @@ +use pagetop::core::server; + +#[pagetop::main] +async fn main() -> std::io::Result<()> { + server::run()?.await +} diff --git a/tests/health_check.rs b/tests/health_check.rs new file mode 100644 index 00000000..4ae6653e --- /dev/null +++ b/tests/health_check.rs @@ -0,0 +1,9 @@ +fn spawn_app() { + let server = pagetop::core::server::run().expect("Failed to bind address"); + let _ = tokio::spawn(server); +} + +#[tokio::test] +async fn health_check_works() { + spawn_app(); +} diff --git a/tests/main.rs b/tests/main.rs new file mode 100644 index 00000000..f56eeca6 --- /dev/null +++ b/tests/main.rs @@ -0,0 +1 @@ +mod health_check;