main.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. use actix_web::{get, web, App, HttpResponse, HttpServer};
  2. use deadpool_postgres::Pool;
  3. mod postgres;
  4. mod user;
  5. #[get("/users")]
  6. async fn list_users(pool: web::Data<Pool>) -> HttpResponse {
  7. let client = match pool.get().await {
  8. Ok(client) => client,
  9. Err(err) => {
  10. log::debug!("unable to get postgres client: {:?}", err);
  11. return HttpResponse::InternalServerError().json("unable to get postgres client");
  12. }
  13. };
  14. match user::User::all(&**client).await {
  15. Ok(list) => HttpResponse::Ok().json(list),
  16. Err(err) => {
  17. log::debug!("unable to fetch users: {:?}", err);
  18. return HttpResponse::InternalServerError().json("unable to fetch users");
  19. }
  20. }
  21. }
  22. fn address() -> String {
  23. std::env::var("ADDRESS").unwrap_or_else(|_| "127.0.0.1:8000".into())
  24. }
  25. #[actix_web::main]
  26. async fn main() -> std::io::Result<()> {
  27. env_logger::init();
  28. let pg_pool = postgres::create_pool();
  29. postgres::migrate_up(&pg_pool).await;
  30. let address = address();
  31. HttpServer::new(move || {
  32. App::new()
  33. .app_data(web::Data::new(pg_pool.clone()))
  34. .service(list_users)
  35. })
  36. .bind(&address)?
  37. .run()
  38. .await
  39. }