You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.1 KiB
57 lines
1.1 KiB
use std::fs::File;
|
|
use std::io::{BufReader, Read};
|
|
use std::path::PathBuf;
|
|
|
|
use serde_derive::Deserialize;
|
|
|
|
use crate::config::*;
|
|
use crate::id::Id;
|
|
use crate::result::RudeResult;
|
|
use crate::try_print;
|
|
|
|
/// Game configuration
|
|
#[derive(Clone, Debug, Deserialize)]
|
|
pub struct Config {
|
|
/// Directory to hold world and players
|
|
pub database: PathBuf,
|
|
|
|
/// Server configuration
|
|
pub server: Server,
|
|
|
|
/// Logging configuration
|
|
pub logging: Logging,
|
|
|
|
/// Default starting location
|
|
pub starting_location: Id,
|
|
}
|
|
|
|
impl Config {
|
|
/// Load and deserialize the toml configuration from the given file.
|
|
pub fn load<P: Into<PathBuf>>(path: P) -> RudeResult<Self> {
|
|
let path = path.into();
|
|
|
|
log::debug!("Reading file {}", path.display());
|
|
|
|
let file: File = try_print!(
|
|
File::open(path.clone()),
|
|
"Unable to open file: {}",
|
|
path.display(),
|
|
);
|
|
|
|
let mut buffer = BufReader::new(file);
|
|
let mut file_contents = String::new();
|
|
|
|
try_print!(
|
|
buffer.read_to_string(&mut file_contents),
|
|
"Unable to read file: {}",
|
|
path.display(),
|
|
);
|
|
|
|
Ok(try_print!(
|
|
toml::from_str(&file_contents),
|
|
"Unable to parse toml: {}",
|
|
path.display(),
|
|
))
|
|
}
|
|
}
|