seru 0.1.0

simple image renderer
Documentation
use std::str::FromStr;

use crate::render::args::Args;

#[derive(Debug, Clone, Default)]
pub struct StackStyle {
    pub place_x: Option<Place>,
    pub place_y: Option<Place>,
}

#[derive(Debug, Clone, Copy)]
pub enum Place {
    Start,
    Center,
    End,
}

impl FromStr for Place {
    type Err = anyhow::Error;

    fn from_str(value: &str) -> Result<Self, Self::Err> {
        Ok(match value {
            "start" => Place::Start,
            "center" => Place::Center,
            "end" => Place::End,
            v => anyhow::bail!("invalid place: {}", v),
        })
    }
}

impl StackStyle {
    pub fn take_from(args: &mut Args) -> anyhow::Result<Self> {
        let mut stack_style = StackStyle::default();

        if let Some(v) = args.take_string("place_x")? {
            stack_style.place_x = Some(v.parse()?);
        }

        if let Some(v) = args.take_string("place_y")? {
            stack_style.place_y = Some(v.parse()?);
        }

        Ok(stack_style)
    }
}