diff --git a/src/main.rs b/src/main.rs index 32c41e8..6a5cde2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,6 @@ use sqlx::{Connection, PgPool}; use toggl::TogglApi; use worker::Worker; -mod sensitive; mod server; mod toggl; mod worker; @@ -43,18 +42,40 @@ struct TableSummary { tag_ids: Vec, } +struct Environment { + database_url: String, + api_token: String, + default_workspace_id: u64, +} + +impl Environment { + fn from_env() -> Self { + let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set"); + let api_token = std::env::var("API_TOKEN").expect("API_TOKEN must be set"); + let default_workspace_id = std::env::var("DEFAULT_WORKSPACE_ID") + .expect("DEFAULT_WORKSPACE_ID must be set") + .parse() + .expect("DEFAULT_WORKSPACE_ID must be a number"); + + Self { + database_url, + api_token, + default_workspace_id, + } + } +} + + #[tokio::main] async fn main() { dotenv::dotenv().expect("Failed to load .env file"); // Init tracing tracing_subscriber::fmt::init(); + let env_config = Environment::from_env(); - let toggl_api = TogglApi::new(sensitive::API_TOKEN, sensitive::WORKSPACE_ID); - - let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set"); - - let mut db = PgPool::connect(&database_url).await.unwrap(); + let toggl_api = TogglApi::new(&env_config.api_token, env_config.default_workspace_id); + let mut db = PgPool::connect(&env_config.database_url).await.unwrap(); sqlx::migrate!("./migrations") .run(&db)