/* * Part of epicinium_server * developed by A Bunch of Hacks. * * Copyright (c) 2018-2021 A Bunch of Hacks * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * * [authors:] * Sander in 't Veld (sander@abunchofhacks.coop) */ use crate::common::log; use std::path::Path; use serde_derive::Deserialize; use anyhow::Context; #[derive(Clone, Deserialize, Debug, Default)] #[serde(rename_all = "kebab-case")] pub struct Settings { #[serde(default)] pub logname: Option, #[serde(default)] pub loglevel: Option, #[serde(default)] pub server: Option, #[serde(default)] pub port: Option, #[serde(default)] pub login_server: Option, #[serde(default)] pub allow_discord_login: Option, #[serde(default)] pub steam_web_key: Option, #[serde(default)] pub slackname: Option, #[serde(default)] pub slackurl: Option, #[serde(default)] pub discordurl: Option, } impl Settings { pub fn load(filename: &str) -> Result { let filename = Path::new(filename); let raw = std::fs::read_to_string(filename)?; let settings = serde_json::from_str(&raw).with_context(|| { format!("parsing settings from '{}'", filename.display()) })?; Ok(settings) } }