luaparser 0.1.1

Read Lua 5.1 code and produce an abstract syntax tree
Documentation
use crate::nodes::{
    Expression,
    FieldExpression,
    IndexExpression,
    Prefix,
    Statement,
};
use crate::parser::builders;

#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Variable {
    Identifier(String),
    Field(Box<FieldExpression>),
    Index(Box<IndexExpression>),
}

impl builders::Variable<Prefix> for Variable {
    fn try_from_prefix(prefix: Prefix) -> Result<Self, Prefix> {
        match prefix {
            Prefix::Identifier(identifier) => Ok(Self::Identifier(identifier)),
            Prefix::Field(field) => Ok(Self::Field(field)),
            Prefix::Index(index) => Ok(Self::Index(index)),
            _ => Err(prefix)
        }
    }
}

#[derive(Clone, Debug, PartialEq, Eq)]
pub struct AssignStatement {
    pub variables: Vec<Variable>,
    pub values: Vec<Expression>,
}

impl From<(Vec<Variable>, Vec<Expression>)> for AssignStatement {
    fn from((variables, values): (Vec<Variable>, Vec<Expression>)) -> Self {
        Self {
            variables,
            values,
        }
    }
}

impl Into<Statement> for AssignStatement {
    fn into(self) -> Statement {
        Statement::Assign(self)
    }
}