summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Oram <dev@mitmaro.ca>2019-06-29 22:49:43 -0230
committerGitHub <noreply@github.com>2019-06-29 22:49:43 -0230
commit549cc55083748fe341b1ef564efb2f6896dc486a (patch)
tree5e0600f642b583d74e032c128fd6c9bc3af62c1e
parent52e290663ca45233c332d31c851885995da944e9 (diff)
parentfdd69ec4d8cf5c6356c6c85dba6b2c9a1a3d3bd7 (diff)
Merge pull request #145 from MitMaro/tim/move-error-to-module
Move error to module
-rw-r--r--src/application.rs29
-rw-r--r--src/error/error.rs55
-rw-r--r--src/error/mod.rs4
-rw-r--r--src/main.rs1
4 files changed, 68 insertions, 21 deletions
diff --git a/src/application.rs b/src/application.rs
index fa97798..5278bc4 100644
--- a/src/application.rs
+++ b/src/application.rs
@@ -6,6 +6,7 @@ use crate::confirm_abort::ConfirmAbort;
use crate::confirm_rebase::ConfirmRebase;
use crate::constants::{LIST_HELP_LINES, VISUAL_MODE_HELP_LINES};
use crate::edit::Edit;
+use crate::error::Error;
use crate::external_editor::ExternalEditor;
use crate::input::{Input, InputHandler};
use crate::process::{ExitStatus, HandleInputResult, HandleInputResultBuilder, ProcessModule, ProcessResult, State};
@@ -18,6 +19,7 @@ pub struct Application<'a> {
confirm_abort: ConfirmAbort,
confirm_rebase: ConfirmRebase,
edit: Edit,
+ error: Error,
external_editor: ExternalEditor<'a>,
git_interactive: GitInteractive,
input_handler: &'a InputHandler<'a>,
@@ -38,6 +40,7 @@ impl<'a> Application<'a> {
confirm_abort: ConfirmAbort::new(),
confirm_rebase: ConfirmRebase::new(),
edit: Edit::new(),
+ error: Error::new(),
external_editor: ExternalEditor::new(config),
git_interactive,
input_handler,
@@ -55,7 +58,7 @@ impl<'a> Application<'a> {
State::ConfirmAbort => self.confirm_abort.activate(state, &self.git_interactive),
State::ConfirmRebase => self.confirm_rebase.activate(state, &self.git_interactive),
State::Edit => self.edit.activate(state, &self.git_interactive),
- State::Error { .. } => {},
+ State::Error { .. } => self.error.activate(state, &self.git_interactive),
State::Exiting => {},
State::ExternalEditor => self.external_editor.activate(state, &self.git_interactive),
State::Help(_) => {},
@@ -71,7 +74,7 @@ impl<'a> Application<'a> {
State::ConfirmAbort => self.confirm_abort.deactivate(),
State::ConfirmRebase => self.confirm_rebase.deactivate(),
State::Edit => self.edit.deactivate(),
- State::Error { .. } => {},
+ State::Error { .. } => self.error.deactivate(),
State::Exiting => {},
State::ExternalEditor => self.external_editor.deactivate(),
State::Help(_) => {},
@@ -87,7 +90,7 @@ impl<'a> Application<'a> {
State::ConfirmAbort => self.confirm_abort.process(&mut self.git_interactive),
State::ConfirmRebase => self.confirm_rebase.process(&mut self.git_interactive),
State::Edit => self.edit.process(&mut self.git_interactive),
- State::Error { .. } => ProcessResult::new(),
+ State::Error { .. } => self.error.process(&mut self.git_interactive),
State::Exiting => ProcessResult::new(),
State::ExternalEditor => self.external_editor.process(&mut self.git_interactive),
State::Help(_) => ProcessResult::new(),
@@ -115,7 +118,7 @@ impl<'a> Application<'a> {
State::ConfirmAbort => self.confirm_abort.render(&self.view, &self.git_interactive),
State::ConfirmRebase => self.confirm_rebase.render(&self.view, &self.git_interactive),
State::Edit => self.edit.render(&self.view, &self.git_interactive),
- State::Error { message, .. } => self.draw_error(message.as_str()),
+ State::Error { .. } => self.error.render(&self.view, &self.git_interactive),
State::Exiting => self.draw_exiting(),
State::ExternalEditor => self.external_editor.render(&self.view, &self.git_interactive),
State::Help(help_state) => self.draw_help(help_state.borrow()),
@@ -127,10 +130,6 @@ impl<'a> Application<'a> {
self.view.refresh()
}
- fn draw_error(&self, error_message: &str) {
- self.view.draw_error(error_message);
- }
-
fn draw_main(&self, visual_mode: bool) {
self.view.draw_main(
self.git_interactive.get_lines(),
@@ -178,7 +177,7 @@ impl<'a> Application<'a> {
.handle_input(self.input_handler, &mut self.git_interactive)
},
State::Edit => self.edit.handle_input(&self.input_handler, &mut self.git_interactive),
- State::Error { return_state, .. } => self.handle_error_input(return_state.borrow()),
+ State::Error { .. } => self.error.handle_input(&self.input_handler, &mut self.git_interactive),
State::Exiting => HandleInputResult::new(Input::Other),
State::ExternalEditor => {
self.external_editor
@@ -257,18 +256,6 @@ impl<'a> Application<'a> {
result.build()
}
- pub fn handle_error_input(&mut self, return_state: &State) -> HandleInputResult {
- let input = self.get_input();
- let mut result = HandleInputResultBuilder::new(input);
- match input {
- Input::Resize => {},
- _ => {
- result = result.state(return_state.clone());
- },
- }
- result.build()
- }
-
pub fn handle_list_input(&mut self) -> HandleInputResult {
let input = self.get_input();
let mut result = HandleInputResultBuilder::new(input);
diff --git a/src/error/error.rs b/src/error/error.rs
new file mode 100644
index 0000000..2ae68c6
--- /dev/null
+++ b/src/error/error.rs
@@ -0,0 +1,55 @@
+use crate::git_interactive::GitInteractive;
+use crate::input::{Input, InputHandler};
+use crate::process::{HandleInputResult, HandleInputResultBuilder, ProcessModule, State};
+use crate::view::View;
+
+pub struct Error {
+ error_message: String,
+ return_state: State,
+}
+
+impl ProcessModule for Error {
+ fn activate(&mut self, state: State, _git_interactive: &GitInteractive) {
+ if let State::Error { message, return_state } = state {
+ self.error_message = message;
+ self.return_state = *return_state;
+ }
+ else {
+ panic!("Help module activated when not expected");
+ }
+ }
+
+ fn deactivate(&mut self) {
+ self.error_message.clear();
+ }
+
+ fn handle_input(
+ &mut self,
+ input_handler: &InputHandler,
+ _git_interactive: &mut GitInteractive,
+ ) -> HandleInputResult
+ {
+ let input = input_handler.get_input();
+ let mut result = HandleInputResultBuilder::new(input);
+ match input {
+ Input::Resize => {},
+ _ => {
+ result = result.state(self.return_state.clone());
+ },
+ }
+ result.build()
+ }
+
+ fn render(&self, view: &View, _git_interactive: &GitInteractive) {
+ view.draw_error(self.error_message.as_str());
+ }
+}
+
+impl Error {
+ pub fn new() -> Self {
+ Self {
+ error_message: String::from(""),
+ return_state: State::List,
+ }
+ }
+}
diff --git a/src/error/mod.rs b/src/error/mod.rs
new file mode 100644
index 0000000..604779b
--- /dev/null
+++ b/src/error/mod.rs
@@ -0,0 +1,4 @@
+#[allow(clippy::module_inception)]
+mod error;
+
+pub use self::error::Error;
diff --git a/src/main.rs b/src/main.rs
index 4231db2..afb1099 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -11,6 +11,7 @@ mod confirm_abort;
mod confirm_rebase;
mod constants;
mod edit;
+mod error;
mod external_editor;
mod git_interactive;
mod input;