stak_build/
error.rs

1use core::{
2    error::Error,
3    fmt::{self, Display, Formatter},
4};
5use glob::{GlobError, PatternError};
6use stak_compiler::CompileError;
7use std::env::VarError;
8use tokio::{io, task::JoinError};
9
10/// A build error.
11#[derive(Debug)]
12pub enum BuildError {
13    /// A compile error.
14    Compile(CompileError),
15    /// An environment variable error.
16    EnvironmentVariable(VarError),
17    /// An I/O error.
18    Io(io::Error),
19    /// A future join error.
20    Join(JoinError),
21    /// A file glob error.
22    Glob(GlobError),
23    /// A file glob pattern error.
24    GlobPattern(PatternError),
25}
26
27impl From<CompileError> for BuildError {
28    fn from(error: CompileError) -> Self {
29        Self::Compile(error)
30    }
31}
32
33impl From<GlobError> for BuildError {
34    fn from(error: GlobError) -> Self {
35        Self::Glob(error)
36    }
37}
38
39impl From<io::Error> for BuildError {
40    fn from(error: io::Error) -> Self {
41        Self::Io(error)
42    }
43}
44
45impl From<JoinError> for BuildError {
46    fn from(error: JoinError) -> Self {
47        Self::Join(error)
48    }
49}
50
51impl From<PatternError> for BuildError {
52    fn from(error: PatternError) -> Self {
53        Self::GlobPattern(error)
54    }
55}
56
57impl From<VarError> for BuildError {
58    fn from(error: VarError) -> Self {
59        Self::EnvironmentVariable(error)
60    }
61}
62
63impl Error for BuildError {}
64
65impl Display for BuildError {
66    fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
67        match self {
68            Self::Compile(error) => write!(formatter, "{error}"),
69            Self::EnvironmentVariable(error) => write!(formatter, "{error}"),
70            Self::Glob(error) => write!(formatter, "{error}"),
71            Self::GlobPattern(error) => write!(formatter, "{error}"),
72            Self::Io(error) => write!(formatter, "{error}"),
73            Self::Join(error) => write!(formatter, "{error}"),
74        }
75    }
76}