snowcap 0.1.3

A simple markup language for iced
Documentation
use crate::{
    error::{ConversionError, Error},
    parser::{Attribute, Value},
};

impl TryInto<iced::alignment::Vertical> for &Value {
    type Error = Error;

    fn try_into(self) -> Result<iced::alignment::Vertical, Self::Error> {
        match self {
            Value::String(str) => match str.as_str() {
                "top" => Ok(iced::alignment::Vertical::Top),
                "center" => Ok(iced::alignment::Vertical::Center),
                "bottom" => Ok(iced::alignment::Vertical::Bottom),
                _ => Err(Error::Conversion(ConversionError::InvalidType(
                    "Expecting top, center, or bottom for Vertical alignment".into(),
                ))),
            },
            _ => Err(Error::Conversion(ConversionError::InvalidType(
                "Expecting Value::String".into(),
            ))),
        }
    }
}

impl TryInto<iced::alignment::Vertical> for &Attribute {
    type Error = Error;

    fn try_into(self) -> Result<iced::alignment::Vertical, Self::Error> {
        (&*self.value()).try_into()
    }
}

impl TryInto<iced::alignment::Horizontal> for &Value {
    type Error = Error;

    fn try_into(self) -> Result<iced::alignment::Horizontal, Self::Error> {
        match self {
            Value::String(str) => match str.as_str() {
                "left" => Ok(iced::alignment::Horizontal::Left),
                "center" => Ok(iced::alignment::Horizontal::Center),
                "right" => Ok(iced::alignment::Horizontal::Right),
                _ => Err(Error::Conversion(ConversionError::InvalidType(
                    "Expecting left, center, or right for Horizontal alignment".into(),
                ))),
            },
            _ => Err(Error::Conversion(ConversionError::InvalidType(
                "Expecting Value::String".into(),
            ))),
        }
    }
}

impl TryInto<iced::alignment::Horizontal> for &Attribute {
    type Error = Error;

    fn try_into(self) -> Result<iced::alignment::Horizontal, Self::Error> {
        (&*self.value()).try_into()
    }
}