diff options
author | Tim Oram <dev@mitmaro.ca> | 2019-06-26 22:37:04 -0230 |
---|---|---|
committer | Tim Oram <dev@mitmaro.ca> | 2019-06-26 22:37:04 -0230 |
commit | fdd69ec4d8cf5c6356c6c85dba6b2c9a1a3d3bd7 (patch) | |
tree | 5e0600f642b583d74e032c128fd6c9bc3af62c1e | |
parent | 52e290663ca45233c332d31c851885995da944e9 (diff) |
Move error to module
-rw-r--r-- | src/application.rs | 29 | ||||
-rw-r--r-- | src/error/error.rs | 55 | ||||
-rw-r--r-- | src/error/mod.rs | 4 | ||||
-rw-r--r-- | src/main.rs | 1 |
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; |