ltrender 0.1.2

a diff based terminal rendering engine
Documentation
use ascii_assets::TerminalChar;
use common_stdx::Rect;

use crate::{
    error::DrawObjectBuilderError,
    terminal_buffer::{standard_drawables::{rect_drawable::BorderStyle, RectDrawable}, Drawable},
};

use crate::handle_char_field;

#[derive(Default)]
pub struct RectDrawableBuilder {
    rect: Option<Rect<i32>>,
    border_thickness: Option<usize>,
    border_style: Option<BorderStyle>,
    fill_style: Option<TerminalChar>,
}

impl RectDrawableBuilder {
    pub fn new() -> Self {
        Self::default()
    }

    pub fn rect(mut self, rect: Rect<i32>) -> Self {
        self.rect = Some(rect);
        self
    }

    pub fn border_thickness(mut self, thickness: usize) -> Self {
        self.border_thickness = Some(thickness);
        self
    }

    pub fn border_style(mut self, style: BorderStyle) -> Self {
        self.border_style = Some(style);
        self
    }

    handle_char_field!(fill_style, fill_style);

    pub fn build(self) -> Result<Box<dyn Drawable>, DrawObjectBuilderError> {
        Ok(Box::new(RectDrawable {
            rect: self
                .rect
                .ok_or(DrawObjectBuilderError::FailedToBuildRectObject())?,
            border_thickness: self
                .border_thickness
                .ok_or(DrawObjectBuilderError::FailedToBuildRectObject())?,
            border_style: self
                .border_style
                .ok_or(DrawObjectBuilderError::FailedToBuildRectObject())?,
            fill_style: self.fill_style,
        }))
    }
}