easy_config 0.5.3

A language, parser, and lexer designed to make easy to read and write configuration files.
Documentation
use crate::expression::Expression;
use crate::expression_iterator::ExpressionIterator;
use crate::serialization::EasyConfig;
use crate::serialization::serialization_error::SerializationError;

mod simple_test;
mod composite_tuple;
mod vec_of_structs;

#[allow(dead_code)]
#[derive(Debug, PartialEq, Eq)]
struct EzStruct {
    name: String,
    count: i32,
}

impl EasyConfig for EzStruct {
    const IS_STRUCT: bool = true;
    fn serialize(&self) -> Expression {
        Expression::list(vec![
            Expression::presence("EzStruct"),
            Expression::list(vec![
                Expression::binding("name", Expression::presence(self.name.clone())),
                Expression::binding("count", Expression::presence(self.count))
            ])
        ])
    }

    fn deserialize(expression_iterator: &mut ExpressionIterator, source_text: impl AsRef<str>) -> Result<Self, SerializationError> where Self: Sized {
        let source_text = source_text.as_ref();
        let mut normalized = expression_iterator
            .normalized_struct("EzStruct")?
            .into_iter();
        normalized.next();
        let mut fields= normalized.binding_map()?;

        Ok(Self {
            name: fields.get("name", source_text)?,
            count: fields.get("count", source_text)?,
        })
    }
}

#[allow(dead_code)]
fn ez_struct() -> EzStruct {
    EzStruct {
        name: "Momo".to_string(),
        count: 3,
    }
}