salak 0.12.0

A rust configuration loader
Documentation
use std::{error::Error, fmt::Display};

#[allow(unused_imports)]
use crate::*;

/// Property error for the whole crate.
#[derive(Debug)]
pub enum PropertyError {
    /// [`Property`] parse failed.
    ParseFail(Option<String>, Box<dyn Error>),
    /// Resolve fail.
    ResolveFail(String),
    /// [`Property`] not found when resolve.
    ResolveNotFound(String),
    /// Recursive parsing same key.
    RecursiveFail(String),
    /// [`Property`] not found
    NotFound(String),
    /// Resource not found
    ResourceNotFound,
}

#[derive(Debug)]
/// Salak parse error.
pub(crate) struct SalakParseError(String);

impl Display for SalakParseError {
    #[inline]
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.write_str(&self.0)
    }
}

impl Error for SalakParseError {}

impl PropertyError {
    /// Create parse fail error.
    #[inline]
    pub fn parse_fail(msg: &str) -> Self {
        PropertyError::ParseFail(None, Box::new(SalakParseError(msg.to_string())))
    }
}

impl<E: Error + 'static> From<E> for PropertyError {
    #[inline]
    fn from(err: E) -> Self {
        PropertyError::ParseFail(None, Box::new(err))
    }
}