Documentation
use glyph_core::GlyphError;
use std::env::VarError;
use std::io;
use thiserror::Error;

#[derive(Error, Debug)]
pub enum CliError {
    #[error(transparent)]
    Core(#[from] GlyphError),

    #[error("IO error: {0}")]
    Io(#[from] io::Error),

    #[error("Environment error: {0}")]
    Env(#[from] VarError),

    #[error("Terminal error: {0}")]
    Terminal(String),

    #[error("Input error: {0}")]
    Input(String),

    #[error("File error: {0}")]
    File(String),

    #[error("Other error: {0}")]
    Other(String),
}

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

impl From<String> for CliError {
    fn from(s: String) -> Self {
        CliError::Input(s)
    }
}

impl From<&str> for CliError {
    fn from(s: &str) -> Self {
        CliError::Input(s.to_string())
    }
}