Mercurial > hg
view rust/rhg/src/error.rs @ 45051:93e8e6e0b5fb
heptapod-ci: build rhg before tests run
Differential Revision: https://phab.mercurial-scm.org/D8682
author | Antoine Cezar <antoine.cezar@octobus.net> |
---|---|
date | Mon, 06 Jul 2020 09:30:26 +0200 |
parents | 513b3ef277a3 |
children | 227281e76c22 |
line wrap: on
line source
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, }, } } }