ouverture-core 0.1.0

A next-generation music player and manager library
Documentation
use serde::Deserialize;
use std::fs::File;
use std::io::prelude::*;
use std::path::{Path, PathBuf};
use toml;

use color_eyre::{eyre::eyre, Result};

use platform_dirs::AppDirs;

#[derive(Deserialize, Debug, Clone)]
pub struct Config {
    pub library: Vec<PathBuf>,
    pub server_address: String,
    pub server_port: usize,

    pub database_dir: PathBuf,
    pub database_port: usize,
}

impl Config {
    pub fn new_from_file(path: &Path) -> Result<Config> {
        let mut file = File::open(path)?;
        let mut contents = String::new();
        file.read_to_string(&mut contents)?;

        let config: Config = toml::from_str(&contents)?;
        Ok(config)
    }
}

impl Default for Config {
    fn default() -> Config {
        Config {
            library: vec![],
            server_address: "127.0.0.1".to_string(),
            server_port: 6603,

            database_dir: AppDirs::new(Some("ouverture/postgres"), true)
                .unwrap()
                .data_dir,
            database_port: 6604,
        }
    }
}