#![feature(proc_macro_hygiene, decl_macro)] #[macro_use] extern crate rocket; #[macro_use] extern crate diesel; mod models; mod config; mod schema; mod routes; mod dns; use std::process::exit; use figment::{Figment, Profile, providers::{Format, Toml, Env}}; use routes::users::*; use routes::zones::*; use rocket_sync_db_pools::database; #[database("sqlite")] pub struct DbConn(diesel::SqliteConnection); #[launch] async fn rocket() -> _ { let figment = Figment::from(rocket::Config::default()) .merge(Toml::file(Env::var_or("NOMILO_CONFIG", "nomilo.toml")).nested()) .merge(Env::prefixed("NOMILO_").ignore(&["PROFILE"]).global()) .select(Profile::from_env_or("NOMILO_PROFILE", "release")); let app_config = match figment.extract::() { Ok(c) => c, Err(e) => { eprintln!("Error loading configuration: {}", e); exit(1); } }; rocket::custom(figment) .manage(app_config) .attach(DbConn::fairing()) .mount("/api/v1", routes![ get_zone_records, create_zone_records, update_zone_records, delete_zone_records, get_zones, create_zone, add_member_to_zone, create_auth_token, create_user, ]) }