ltrender 0.1.11

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

use crate::{error::DrawObjectBuilderError, terminal_buffer::LineDrawable};

use crate::{Drawable, handle_char_field, handle_pointed_field};

#[derive(Default)]
pub struct LineDrawableBuilder {
    start: Option<Point<i32>>,
    end: Option<Point<i32>>,
    chr: Option<TerminalChar>,
}

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

    handle_pointed_field!(start, start);
    handle_pointed_field!(end, end);

    handle_char_field!(chr, chr);

    pub fn build(self) -> Result<Box<dyn Drawable>, DrawObjectBuilderError> {
        Ok(Box::new(LineDrawable {
            start: self
                .start
                .ok_or(DrawObjectBuilderError::FailedToBuildLineObject())?,
            end: self
                .end
                .ok_or(DrawObjectBuilderError::FailedToBuildLineObject())?,
            chr: self
                .chr
                .ok_or(DrawObjectBuilderError::FailedToBuildLineObject())?,
        }))
    }
}