use std::io;
#[derive(Debug, thiserror::Error)]
pub enum InputError {
#[error("No editor found. Set VISUAL or EDITOR environment variable.")]
NoEditor,
#[error("Editor cancelled without saving.")]
EditorCancelled,
#[error("Editor failed: {0}")]
EditorFailed(#[source] io::Error),
#[error("Failed to read stdin: {0}")]
StdinFailed(#[source] io::Error),
#[error("Failed to read clipboard: {0}")]
ClipboardFailed(String),
#[error("Prompt cancelled by user.")]
PromptCancelled,
#[error("Prompt failed: {0}")]
PromptFailed(String),
#[error("Validation failed: {0}")]
ValidationFailed(String),
#[error("No input provided and no default available.")]
NoInput,
#[error("Required argument '{0}' not provided.")]
MissingArgument(String),
#[error("Failed to parse argument '{name}': {reason}")]
ParseError { name: String, reason: String },
}
impl InputError {
pub fn validation(msg: impl Into<String>) -> Self {
Self::ValidationFailed(msg.into())
}
pub fn parse(name: impl Into<String>, reason: impl Into<String>) -> Self {
Self::ParseError {
name: name.into(),
reason: reason.into(),
}
}
}