You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

99 lines
2.4 KiB

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<gemini::Request>, mut res: Box<gemini::Response>) -> GempressResult<()>{
let response = format!(r#"
# Astrofarm
Hello, {}
"#, "user");
res.status(StatusCode::Success)?.send(response.as_bytes())?;
Ok(())
}
fn add_user_handler(req: Box<gemini::Request>, mut res: Box<gemini::Response>) -> 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<gemini::Request>, mut res: Box<gemini::Response>) -> GempressResult<()>{
use self::schema::users::dsl::*;
let conn = establish_connection();
let results = users
.load::<User>(&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();
}