59 lines
1.6 KiB
Rust
59 lines
1.6 KiB
Rust
|
|
use std::path::PathBuf;
|
||
|
|
|
||
|
|
/// Errors that can occur during hook loading, parsing, or execution.
|
||
|
|
#[derive(Debug, thiserror::Error)]
|
||
|
|
pub enum HookError {
|
||
|
|
#[error("failed to read hook file {path}: {source}")]
|
||
|
|
ReadFile {
|
||
|
|
path: PathBuf,
|
||
|
|
source: std::io::Error,
|
||
|
|
},
|
||
|
|
|
||
|
|
#[error("failed to parse hook file {path}: {detail}")]
|
||
|
|
ParseFile { path: PathBuf, detail: String },
|
||
|
|
|
||
|
|
#[error("hook {name} in {path}: invalid regex pattern: {source}")]
|
||
|
|
InvalidMatcher {
|
||
|
|
name: String,
|
||
|
|
path: PathBuf,
|
||
|
|
source: regex::Error,
|
||
|
|
},
|
||
|
|
|
||
|
|
#[error("hook {name} in {path}: lifecycle hooks ({event}) must not specify a matcher in v0")]
|
||
|
|
LifecycleMatcherNotAllowed {
|
||
|
|
name: String,
|
||
|
|
path: PathBuf,
|
||
|
|
event: String,
|
||
|
|
},
|
||
|
|
|
||
|
|
#[error("hook {name} timed out after {elapsed_ms}ms")]
|
||
|
|
Timeout { name: String, elapsed_ms: u64 },
|
||
|
|
|
||
|
|
#[error("hook {name} command failed: {source}")]
|
||
|
|
CommandFailed {
|
||
|
|
name: String,
|
||
|
|
source: std::io::Error,
|
||
|
|
},
|
||
|
|
|
||
|
|
#[error("hook {name} produced invalid output: {detail}")]
|
||
|
|
InvalidOutput { name: String, detail: String },
|
||
|
|
|
||
|
|
#[error("hook {name}: command not found or not executable: {path}")]
|
||
|
|
CommandNotFound { name: String, path: PathBuf },
|
||
|
|
|
||
|
|
#[error("hook {name} in {path}: {detail}")]
|
||
|
|
InvalidConfig {
|
||
|
|
name: String,
|
||
|
|
path: PathBuf,
|
||
|
|
detail: String,
|
||
|
|
},
|
||
|
|
|
||
|
|
#[error(
|
||
|
|
"hook {name} in {path}: unsupported handler type '{handler_type}', only 'command' is supported in v0"
|
||
|
|
)]
|
||
|
|
UnsupportedHandlerType {
|
||
|
|
name: String,
|
||
|
|
path: PathBuf,
|
||
|
|
handler_type: String,
|
||
|
|
},
|
||
|
|
}
|