use crate::app::{AppState, Action};
use crate::errors::ComponentError;
use crate::input::InputEvent;
use ratatui::Frame;
use ratatui::layout::Rect;
use tracing::instrument;
pub trait Component: Send + Sync {
#[instrument(skip(self, state), fields(component = self.name()))]
fn init(&mut self, state: &AppState) -> Result<(), ComponentError> {
let _ = state; Ok(())
}
#[instrument(skip(self, state), fields(component = self.name()))]
fn handle_event(
&mut self,
event: InputEvent,
state: &AppState,
) -> Result<Option<Action>, ComponentError> {
let _ = (event, state); Ok(None)
}
#[instrument(skip(self, state), fields(component = self.name()))]
fn update(
&mut self,
action: Action,
state: &mut AppState,
) -> Result<(), ComponentError> {
let _ = (action, state); Ok(())
}
#[allow(dead_code)]
#[instrument(skip(self, state), fields(component = self.name()))]
fn render(&mut self, frame: &mut Frame, area: Rect, state: &AppState) {
let _ = (frame, area, state); }
fn name(&self) -> &'static str;
}