Skip to main content

java_manager/
error.rs

1//! Error types for Java environment detection and execution.
2
3use std::fmt;
4use std::io;
5
6/// Errors that can occur when working with Java installations.
7#[derive(Debug)]
8pub enum JavaError {
9    /// The provided Java path is invalid (does not exist or cannot be used).
10    InvalidJavaPath(String),
11
12    /// A required Java executable or file was not found.
13    NotFound(String),
14
15    /// An I/O error occurred (e.g., reading a file or spawning a process).
16    IoError(io::Error),
17
18    /// An error during command execution (e.g., `java -version` failed).
19    ExecuteError(String),
20
21    /// A runtime error, such as unexpected output format.
22    RuntimeError(String),
23
24    /// Execution of a Java process failed (non-zero exit code).
25    ExecutionFailed(String),
26
27    /// A generic error with a custom message.
28    Other(String),
29}
30
31impl fmt::Display for JavaError {
32    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
33        match self {
34            JavaError::InvalidJavaPath(msg) => write!(f, "Invalid Java path: {}", msg),
35            JavaError::NotFound(msg) => write!(f, "Not found: {}", msg),
36            JavaError::IoError(err) => write!(f, "IO error: {}", err),
37            JavaError::ExecuteError(msg) => write!(f, "Execute error: {}", msg),
38            JavaError::RuntimeError(msg) => write!(f, "Runtime error: {}", msg),
39            JavaError::ExecutionFailed(msg) => write!(f, "Execution failed: {}", msg),
40            JavaError::Other(msg) => write!(f, "Other error: {}", msg),
41        }
42    }
43}
44
45impl std::error::Error for JavaError {
46    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
47        match self {
48            JavaError::IoError(err) => Some(err),
49            _ => None,
50        }
51    }
52}
53
54impl From<io::Error> for JavaError {
55    fn from(err: io::Error) -> Self {
56        JavaError::IoError(err)
57    }
58}