use std::{fs::File, env::args};
use actix_files as fs;
-use actix_web::{web, middleware, App, HttpServer, HttpResponse, Result, web::Query, middleware::Logger};
+use actix_web::{get, web, Responder, middleware, App, HttpServer, HttpResponse, HttpRequest, web::Query};
use askama::Template;
use listenfd::ListenFd;
use ron::de::from_reader;
use serde::Deserialize;
-use env_logger;
use itertools::Itertools;
mod db;
#[derive(Template)]
-#[template(path = "main.html")]
-struct MainTemplate<'a> {
- test: &'a str,
+#[template(path = "home.html")]
+struct HomeTemplate {
+ recipes: Vec<db::Recipe>
+}
+
+#[derive(Template)]
+#[template(path = "view_recipe.html")]
+struct ViewRecipeTemplate {
+ recipes: Vec<db::Recipe>,
+ current_recipe: db::Recipe
}
#[derive(Deserialize)]
m: Option<String>
}
-fn main_page(query: Query<Request>) -> Result<HttpResponse> {
-
- let main_template = MainTemplate { test: &"* test *" };
+#[get("/")]
+async fn home_page(req: HttpRequest) -> impl Responder {
+ HomeTemplate { recipes: vec![ db::Recipe { title: String::from("Saumon en croûte feuilletée"), id: 1 }, db::Recipe { title: String::from("Croissant au jambon"), id: 2 } ] }
+}
- let s = main_template.render().unwrap();
- Ok(HttpResponse::Ok().content_type("text/html").body(s))
+#[get("/recipe/view/{id}")]
+async fn view_page(req: HttpRequest, path: web::Path<(i32,)>) -> impl Responder {
+ panic!("ERROR");
+ ViewRecipeTemplate { recipes: vec![ db::Recipe { title: String::from("Saumon en croûte feuilletée"), id: 1 }, db::Recipe { title: String::from("Croissant au jambon"), id: 2 } ], current_recipe: db::Recipe { title: String::from("Saumon en croûte feuilletée"), id: 1 } }
}
#[derive(Debug, Deserialize)]
first_arg[first_arg.rfind(sep).unwrap()+1..].to_string()
}
-fn main() -> std::io::Result<()> {
+#[actix_rt::main]
+async fn main() -> std::io::Result<()> {
if process_args() { return Ok(()) }
- println!("Starting RUP as web server...");
+ println!("Starting Recipes as web server...");
let config: Config = {
let f = File::open(consts::FILE_CONF).unwrap_or_else(|_| panic!("Failed to open configuration file {}", consts::FILE_CONF));
// let database_connection = db::create_or_update();
std::env::set_var("RUST_LOG", "actix_web=info");
- env_logger::init();
let mut listenfd = ListenFd::from_env();
let mut server =
|| {
App::new()
.wrap(middleware::Compress::default())
- .wrap(Logger::default())
- .wrap(Logger::new("%a %{User-Agent}i"))
- .service(web::resource("/").to(main_page))
+ .service(home_page)
+ .service(view_page)
.service(fs::Files::new("/static", "static").show_files_listing())
}
);
server.bind(&format!("0.0.0.0:{}", config.port)).unwrap()
};
- server.run()
+ server.run().await
}
fn process_args() -> bool {
print_usage();
return true
} else if args.iter().any(|arg| arg == "--test") {
- let database_connection = db::create_or_update();
+ let db_connection = db::Connection::new();
return true
}