use crate::actions::Action;
use crate::commands::CommandError;
use crate::editing::application::ApplicationInfo;
use crate::key::MacroError;
use crate::keybindings::dialog::Dialog;
use crate::prelude::*;
#[derive(thiserror::Error, Debug)]
#[non_exhaustive]
pub enum EditError<I: ApplicationInfo> {
#[error("That action requires interactive confirmation")]
NeedConfirm(Box<dyn Dialog<Action<I>>>),
#[error("No word underneath cursor")]
NoCursorWord,
#[error("No current search specified")]
NoSearch,
#[error("No current selection")]
NoSelection,
#[error("Invalid digraph: {0:?} {1:?}")]
InvalidDigraph(char, char),
#[error("Invalid regular expression: {0}")]
InvalidRegex(#[from] regex::Error),
#[error("Mark not set")]
MarkNotSet(Mark),
#[error("Position is located in another buffer")]
WrongBuffer(I::ContentId),
#[error("Failed to combine cursor groups: {0}")]
CursorGroupCombine(#[from] crate::editing::cursor::CursorGroupCombineError),
#[error("Integer conversion error: {0}")]
IntConversionError(#[from] std::num::TryFromIntError),
#[error("Integer parsing error: {0}")]
IntParseError(#[from] std::num::ParseIntError),
#[error("Buffer is read-only")]
ReadOnly,
#[error("Unimplemented: {0}")]
Unimplemented(String),
#[error("Macro error: {0}")]
MacroFailure(#[from] MacroError),
#[error("Register Error: {0}")]
Register(#[from] crate::editing::store::RegisterError),
#[error("Error: {0}")]
Failure(String),
}
#[derive(thiserror::Error, Debug)]
#[non_exhaustive]
pub enum UIError<I>
where
I: ApplicationInfo,
{
#[error("{0}")]
Application(I::Error),
#[error("Input/Output Error: {0}")]
IOError(#[from] std::io::Error),
#[error("Editing error: {0}")]
EditingFailure(#[from] EditError<I>),
#[error("Failed command: {0}")]
CommandFailure(#[from] CommandError),
#[error("That action requires interactive confirmation")]
NeedConfirm(Box<dyn Dialog<Action<I>>>),
#[error("No previous positions in list")]
NoList(PositionList),
#[error("No tab currently selected")]
NoTab,
#[error("No window currently selected")]
NoWindow,
#[error("Unimplemented: {0}")]
Unimplemented(String),
#[error("Error: {0}")]
Failure(String),
}
pub type EditResult<V, I> = Result<V, EditError<I>>;
pub type UIResult<V, I> = Result<V, UIError<I>>;