embers-client 0.1.0

Client rendering, input handling, configuration, and scripting support for Embers.
use std::io;
use std::path::PathBuf;

use thiserror::Error;

use super::discover::ConfigOrigin;
use crate::scripting::ScriptError;

pub type ConfigResult<T> = std::result::Result<T, ConfigError>;

#[derive(Debug, Error)]
pub enum ConfigError {
    #[error("{origin} config path '{path}' does not exist")]
    MissingConfig { origin: ConfigOrigin, path: PathBuf },
    #[error("{origin} config is missing a canonical path")]
    MissingPath { origin: ConfigOrigin },
    #[error("failed to inspect {origin} config path '{path}': {source}")]
    PathCheck {
        origin: ConfigOrigin,
        path: PathBuf,
        #[source]
        source: io::Error,
    },
    #[error("failed to canonicalize {origin} config path '{path}': {source}")]
    Canonicalize {
        origin: ConfigOrigin,
        path: PathBuf,
        #[source]
        source: io::Error,
    },
    #[error("failed to read {origin} config file '{path}': {source}")]
    Read {
        origin: ConfigOrigin,
        path: PathBuf,
        #[source]
        source: io::Error,
    },
}

#[derive(Debug, Error)]
pub enum ConfigManagerError {
    #[error(transparent)]
    Config(#[from] ConfigError),
    #[error(transparent)]
    Script(#[from] ScriptError),
}