wp-lang 0.1.8

WPL language crate with AST, parser, evaluator, builtins, and generators.
Documentation
use thiserror::Error;

use crate::ast::WplField;
use crate::compat::{OptionConv, OptionError};

#[derive(Error, Debug, PartialEq)]
pub enum FieldError {
    #[error("filed define less : {0} ")]
    LessData(String),
    #[error("filed conf less : {0} ")]
    LessConf(String),
    #[error("field is empty ")]
    Empty,
}

impl OptionError for FieldError {
    fn empty() -> Self {
        FieldError::Empty
    }

    fn less(msg: String) -> Self {
        FieldError::LessConf(msg)
    }
}

impl<'a> OptionConv<&'a WplField, FieldError> for Option<&'a WplField> {
    fn no_less(self, name: &str) -> Result<&'a WplField, FieldError> {
        self.ok_or(FieldError::LessConf(format!("{} less", name)))
    }
    fn no_empty(self) -> Result<&'a WplField, FieldError> {
        self.ok_or(FieldError::Empty)
    }
}

#[cfg(test)]
mod test {
    use crate::ast::WplField;
    use crate::compat::OptionConv;
    use crate::eval::value::error::FieldError;

    //test option conv

    #[test]
    fn test_option_conv() {
        let conf = None::<&WplField>.no_empty();
        assert_eq!(conf, Err(FieldError::Empty));
    }
}