tmaze 1.12.1

Simple multiplatform maze solving game for terminal written entirely in Rust
Documentation
use crate::{
    renderer::Renderer,
    ui::{self, CrosstermError},
};

use super::ColorScheme;

pub trait EditableField {
    fn print(&self) -> String;

    fn edit(
        &mut self,
        renderer: &mut Renderer,
        color_scheme: ColorScheme,
    ) -> Result<bool, EditableFieldError> {
        ui::popup(
            renderer,
            color_scheme.normals(),
            color_scheme.texts(),
            &format!("Current value: {}", self.print()),
            &["Cannot edit this field"],
        )
        .map(|_| false)
        .map_err(|e| e.into())
    }
}

impl EditableField for i32 {
    fn print(&self) -> String {
        self.to_string()
    }
}

impl<T: EditableField> EditableField for Option<T> {
    fn print(&self) -> String {
        match self {
            Some(value) => value.print(),
            None => "None".to_string(),
        }
    }
}

#[derive(Debug)]
pub enum EditableFieldError {
    Back,
    Quit,
    Crossterm(CrosstermError),
}

impl From<CrosstermError> for EditableFieldError {
    fn from(error: CrosstermError) -> Self {
        Self::Crossterm(error)
    }
}