extern crate gempress; extern crate dotenv; #[macro_use] extern crate diesel; use std::path::PathBuf; use std::env; use gempress::Gempress; use gempress::error::GempressResult; use gempress::gemini; use gempress::gemini::StatusCode; use diesel::prelude::*; use diesel::sqlite::SqliteConnection; use self::models::*; pub mod models; pub mod schema; pub fn establish_connection() -> SqliteConnection { dotenv::dotenv().ok(); let database_url = env::var("DATABASE_URL") .expect("DATABASE_URL must be set"); SqliteConnection::establish(&database_url) .expect(&format!("Error connecting to {}", database_url)) } fn index_handler(req: Box, mut res: Box) -> GempressResult<()>{ let response = format!(r#" # Astrofarm Hello, {} "#, "user"); res.status(StatusCode::Success)?.send(response.as_bytes())?; Ok(()) } fn add_user_handler(req: Box, mut res: Box) -> GempressResult<()>{ use self::schema::users::dsl::*; let conn = establish_connection(); let new_user = NewUser { name: "Foo".into(), }; diesel::insert_into(users).values(new_user).execute(&conn); let user: User = users .order(id.desc()) .first(&conn) .expect("Error loading posts"); let response = format!(r#" # User inserted User "{}" created. ID: {} "#, user.name, user.id); res.status(StatusCode::Success)?.send(response.as_bytes())?; Ok(()) } fn show_users_handler(req: Box, mut res: Box) -> GempressResult<()>{ use self::schema::users::dsl::*; let conn = establish_connection(); let results = users .load::(&conn) .expect("Error loading posts"); let mut response = "# Users\n\n".to_string(); for user in results { response += &format!("{}: {}\n", user.id, user.name); }; res.status(StatusCode::Success)?.send(response.as_bytes())?; Ok(()) } fn main() { // Run make_cert.sh to generate a certificate let config = gempress::Config::new(PathBuf::from("cert.pem"), PathBuf::from("key.pem")); let conn = establish_connection(); let mut app = Gempress::new(config); app.on("/", &show_users_handler); app.on("/add_user", &add_user_handler); app.listen(1965, || { println!("Listening on port 1965"); }) .unwrap(); }