HomeDisk/core/src/main.rs

66 lines
1.7 KiB
Rust
Raw Normal View History

use std::{fs::File, path::Path};
use homedisk_database::Database;
2022-06-08 19:16:12 +00:00
use homedisk_server::serve_http;
use homedisk_types::config::Config;
use tracing::{info, warn};
mod logger;
pub const DATABASE_FILE: &str = "homedisk.db";
2022-04-16 18:19:38 +00:00
#[tokio::main]
async fn main() {
logger::init();
2022-04-16 18:19:38 +00:00
2022-08-29 11:12:16 +00:00
let config = Config::parse().expect("Failed to parse configuration file");
2022-04-16 19:22:01 +00:00
2022-06-07 20:36:26 +00:00
// open database connection
let db =
// if database file doesn't exists create it
if !Path::new(DATABASE_FILE).exists() {
warn!("Database file doesn't exists.");
info!("Creating database file...");
// create an empty database file
2022-08-29 11:12:16 +00:00
File::create(DATABASE_FILE).expect("Failed to create a database file");
// open database file
let db = Database::open(DATABASE_FILE)
.await
2022-08-29 11:12:16 +00:00
.expect("Failed to open database file");
// create tables in the database
db.create_tables()
.await
2022-08-29 11:12:16 +00:00
.expect("Failed to create tables in the database");
db
}
// if database file exists
else {
2022-07-04 14:59:38 +00:00
Database::open(DATABASE_FILE)
.await
2022-08-29 11:12:16 +00:00
.expect("Failed to open database file")
};
// change the type from Vec<String> to Vec<HeaderValue> so that the http server can correctly detect CORS hosts
let origins = config
.http
.cors
.iter()
2022-06-07 20:36:26 +00:00
.map(|e| e.parse().expect("parse CORS hosts"))
.collect();
2022-06-08 19:16:12 +00:00
// format host ip and port
let host = format!(
"{host}:{port}",
host = config.http.host,
port = config.http.port
);
serve_http(host, origins, db, config)
.await
.expect("start http server");
2022-06-08 19:16:12 +00:00
}