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.

70 lines
1.9 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. #![forbid(unsafe_code)]
  2. use actix_demo::{AppConfig, AppData, EnvConfig};
  3. use diesel::{r2d2::ConnectionManager, SqliteConnection};
  4. use env_logger::Env;
  5. use io::ErrorKind;
  6. use std::io;
  7. #[actix_web::main]
  8. async fn main() -> io::Result<()> {
  9. let _ = dotenv::dotenv().map_err(|err| {
  10. io::Error::new(
  11. ErrorKind::Other,
  12. format!("Failed to set up env: {:?}", err),
  13. )
  14. })?;
  15. let _ = env_logger::try_init_from_env(
  16. Env::default().filter("ACTIX_DEMO_RUST_LOG"),
  17. )
  18. .map_err(|err| {
  19. io::Error::new(
  20. ErrorKind::Other,
  21. format!("Failed to set up env logger: {:?}", err),
  22. )
  23. })?;
  24. let env_config = envy::prefixed("ACTIX_DEMO_")
  25. .from_env::<EnvConfig>()
  26. .map_err(|err| {
  27. io::Error::new(
  28. ErrorKind::Other,
  29. format!("Failed to parse config: {:?}", err),
  30. )
  31. })?;
  32. let connspec = &env_config.database_url;
  33. let manager = ConnectionManager::<SqliteConnection>::new(connspec);
  34. let pool = r2d2::Pool::builder().build(manager).map_err(|err| {
  35. io::Error::new(
  36. ErrorKind::Other,
  37. format!("Failed to create pool: {:?}", err),
  38. )
  39. })?;
  40. let _ = {
  41. let conn = &pool.get().map_err(|err| {
  42. io::Error::new(
  43. ErrorKind::Other,
  44. format!("Failed to get connection: {:?}", err),
  45. )
  46. })?;
  47. let _ =
  48. diesel_migrations::run_pending_migrations(conn).map_err(|err| {
  49. io::Error::new(
  50. ErrorKind::Other,
  51. format!("Error running migrations: {:?}", err),
  52. )
  53. })?;
  54. };
  55. let app_data = AppData {
  56. config: AppConfig {
  57. hash_cost: env_config.hash_cost,
  58. },
  59. pool: pool.clone(),
  60. };
  61. actix_demo::run(format!("{}:7800", env_config.http_host), app_data).await
  62. }