aboutsummaryrefslogtreecommitdiff
path: root/src/component.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/component.rs')
-rw-r--r--src/component.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/component.rs b/src/component.rs
new file mode 100644
index 0000000..1896bc2
--- /dev/null
+++ b/src/component.rs
@@ -0,0 +1,43 @@
+use crossterm::event::{KeyEvent, MouseEvent};
+use eyre::Result;
+use ratatui::prelude::{Frame, Rect};
+
+use crate::action::Action;
+use crate::app_event::AppEvent;
+
+pub trait Component {
+ fn init(&mut self) -> Result<()> {
+ Ok(())
+ }
+
+ #[allow(unused)]
+ fn handle_event(&mut self, event: AppEvent) -> Result<Option<Action>> {
+ match event {
+ AppEvent::Key(key_event) => Ok(self.handle_key_event(key_event)?),
+ AppEvent::Mouse(mouse_event) => {
+ Ok(self.handle_mouse_event(mouse_event)?)
+ }
+ _ => Ok(None),
+ }
+ }
+
+ #[allow(unused)]
+ fn handle_key_event(&mut self, key: KeyEvent) -> Result<Option<Action>> {
+ Ok(None)
+ }
+
+ #[allow(unused)]
+ fn handle_mouse_event(
+ &mut self,
+ mouse: MouseEvent,
+ ) -> Result<Option<Action>> {
+ Ok(None)
+ }
+
+ #[allow(unused)]
+ fn update(&mut self, action: Action) -> Result<Option<Action>> {
+ Ok(None)
+ }
+
+ fn render(&mut self, frame: &mut Frame, rect: Rect);
+}