gotl 0.1.0

Parse and view Go test logs
Documentation
use ratatui::{Frame, crossterm::event::Event};

use crate::{
    PostEventAction,
    errors::Error,
    screen::{details_screen::DetailsScreen, log_screen::LogScreen, tests_screen::TestsScreen},
};

pub mod details_screen;
pub mod log_screen;
pub mod tests_screen;

pub enum Screen {
    TestsScreen(Box<TestsScreen>),
    LogScreen(LogScreen),
    DetailsScreen(DetailsScreen),
}

impl From<Box<TestsScreen>> for Screen {
    fn from(value: Box<TestsScreen>) -> Self {
        Screen::TestsScreen(value)
    }
}

impl From<LogScreen> for Screen {
    fn from(value: LogScreen) -> Self {
        Screen::LogScreen(value)
    }
}

impl From<DetailsScreen> for Screen {
    fn from(value: DetailsScreen) -> Self {
        Screen::DetailsScreen(value)
    }
}

impl Screen {
    pub async fn update(&mut self) -> Result<bool, Error> {
        match self {
            Screen::TestsScreen(tests_screen) => tests_screen.update().await,
            _ => Ok(false),
        }
    }
    pub fn handle_event(&mut self, event: Event) -> Result<Option<PostEventAction>, Error> {
        match self {
            Screen::TestsScreen(tests_screen) => tests_screen.handle_event(event),
            Screen::LogScreen(log_screen) => Ok(log_screen.handle_event(event)),
            Screen::DetailsScreen(details_screen) => Ok(details_screen.handle_event(event)),
        }
    }

    pub fn render(&mut self, frame: &mut Frame) {
        match self {
            Screen::TestsScreen(tests_screen) => tests_screen.render(frame),
            Screen::LogScreen(log_screen) => log_screen.render(frame),
            Screen::DetailsScreen(details_screen) => details_screen.render(frame),
        }
    }
}