use std::env; use std::path::PathBuf; use rocket::figment::{ providers::{Env, Format, Serialized, Toml}, Figment, Profile, }; use serde::{Deserialize, Serialize}; use uuid::Uuid; #[derive(Debug, Deserialize, Serialize)] pub struct Config { pub data_dir: PathBuf, } impl Default for Config { fn default() -> Self { let tmp_data_folder = PathBuf::from(format!("feuille-{}", Uuid::new_v4().to_string())); let data_dir = env::temp_dir().join(tmp_data_folder); Self { data_dir } } } impl Config { pub fn figment() -> Figment { Figment::from(rocket::Config::default()) .merge(Serialized::defaults(Config::default())) .merge(Toml::file("feuille.toml").nested()) .merge(Env::prefixed("FEUILLE_").global()) .select(Profile::from_env_or("FEUILLE_PROFILE", "default")) } }