##// END OF EJS Templates
hg-core: remove the `Operation` trait...
hg-core: remove the `Operation` trait There is no way to currently define a trait which can both return references to `self` and to passed data, which is what we would need. Generic Associated Types may fix this and allow us to have a unified interface. See: rust #44265 Differential Revision: https://phab.mercurial-scm.org/D8862

File last commit:

r45570:afecc7f7 default
r45917:452ece56 default
Show More
error.rs
60 lines | 1.6 KiB | application/rls-services+xml | RustLexer
use crate::exitcode;
use crate::ui::UiError;
use std::convert::From;
/// The kind of command error
#[derive(Debug, PartialEq)]
pub enum CommandErrorKind {
/// The command finished without error
Ok,
/// The root of the repository cannot be found
RootNotFound,
/// The current directory cannot be found
CurrentDirNotFound,
/// The standard output stream cannot be written to
StdoutError,
/// The standard error stream cannot be written to
StderrError,
}
impl CommandErrorKind {
pub fn get_exit_code(&self) -> exitcode::ExitCode {
match self {
CommandErrorKind::Ok => exitcode::OK,
CommandErrorKind::RootNotFound => exitcode::ABORT,
CommandErrorKind::CurrentDirNotFound => exitcode::ABORT,
CommandErrorKind::StdoutError => exitcode::ABORT,
CommandErrorKind::StderrError => exitcode::ABORT,
}
}
}
/// The error type for the Command trait
#[derive(Debug, PartialEq)]
pub struct CommandError {
pub kind: CommandErrorKind,
}
impl CommandError {
/// Exist the process with the corresponding exit code.
pub fn exit(&self) -> () {
std::process::exit(self.kind.get_exit_code())
}
}
impl From<CommandErrorKind> for CommandError {
fn from(kind: CommandErrorKind) -> Self {
CommandError { kind }
}
}
impl From<UiError> for CommandError {
fn from(error: UiError) -> Self {
CommandError {
kind: match error {
UiError::StdoutError(_) => CommandErrorKind::StdoutError,
UiError::StderrError(_) => CommandErrorKind::StderrError,
},
}
}
}