use axum::{routing::{get,post}, Router};
use axum::serve;
use serde::Deserialize;
-use std::{collections::HashMap, env, fs::{read_dir, File}};
+use std::{collections::HashMap, fs::{read_dir, File}};
use std::net::SocketAddr;
use tokio::net::TcpListener;
#[tokio::main]
async fn main() -> Result<(),Box<dyn std::error::Error>> {
- // set defaults
- unsafe {
- env::set_var("BIND_HOST","127.0.0.1");
- env::set_var("BIND_PORT","3000");
- env::set_var("APP_ROOT", "/");
- }
- // ... then override from .env, ignoring any error (file may not be there)
- let _ = dotenvy::dotenv_override();
+ // set config values. real env vars will take precedence over vars in .env
+ let _ = dotenvy::dotenv();
+ let bind_host = match dotenvy::var("BIND_HOST") {
+ Ok(val) => val,
+ Err(_) => "127.0.0.1".to_string()
+ };
+ let bind_port = match dotenvy::var("BIND_PORT") {
+ Ok(val) => val,
+ Err(_) => "3000".to_string()
+ };
+ let app_root = match dotenvy::var("APP_ROOT") {
+ Ok(val) => val,
+ Err(_) => "/".to_string()
+ };
let certs = load_certs_from_fs().await.unwrap();
- let app_root = env::var("APP_ROOT")?;
let app_state = AppState{
certs,
- app_root: app_root.clone(),
+ app_root: app_root.to_string()
};
let all_routes = Router::new()
.with_state(app_state);
let addr = SocketAddr::new(
- env::var("BIND_HOST")?.parse()?,
- env::var("BIND_PORT")?.parse()?);
+ bind_host.parse()?, bind_port.parse()?);
let listener = TcpListener::bind(&addr).await.unwrap();
serve(listener, all_routes.into_make_service())
.await