use std::{ fs::metadata, path::{Path, PathBuf}, string, }; use diesel::prelude::*; use dotenvy::dotenv; use std::env; mod library; mod models; mod net; mod schema; mod types; use library::{Handle, Importer, Library}; fn open_db_file() -> SqliteConnection { let database_url = env::var("DATABASE_URL").expect("DATABASE_URL missing"); SqliteConnection::establish(&database_url) .unwrap_or_else(|_| panic!("Error connecting to {}", database_url)) } fn open_db_in_memory() -> SqliteConnection { use diesel_migrations::{EmbeddedMigrations, MigrationHarness, embed_migrations}; const MIGRATIONS: EmbeddedMigrations = embed_migrations!(); let mut conn = SqliteConnection::establish(":memory:") .unwrap_or_else(|_| panic!("Error starting in-memory database")); conn.run_pending_migrations(MIGRATIONS) .unwrap_or_else(|e| panic!("Error applying in-memory migrations: {}", e)); conn } fn main() { println!("Hello, world!"); dotenv().ok(); let mut library_instance = Library::new(open_db_in_memory()); let import_path = env::var("IMPORT_PATH").expect("IMPORT_PATH not set!"); Importer::import_scan(&mut library_instance, Path::new(&import_path)) .expect("Error importing files"); library_instance.print().expect("Error printing library"); let library_handle = Handle::new(library_instance); net::http::start(library_handle).expect("HTTP server failed to start"); }