use crate::{
    parser::ast::{
        access::Access,
        as_cast::As,
        between::Between,
        binary_expression::BinaryExpression,
        binding::Binding,
        case::Case,
        class::{ClassAccess, ClassDefinition},
        execute::SpawnOrExecute,
        format::Format,
        function::Function,
        if_expression::If,
        is_check::IsCheck,
        list::List,
        methods::MethodInvocation,
        negate::Negate,
        parse::Parse,
        replace::Replace,
        self_divide::SelfDivide,
        with::With,
    },
    value::Value,
};

#[derive(Debug, PartialEq)]
pub(crate) enum Expression {
    Literal(Value),
    Binary(BinaryExpression),
    Negate(Negate),
    Brackets(Box<Expression>),
    Access(Access),
    IsCheck(IsCheck),
    If(If),
    Case(Case),
    Between(Between),
    Format(Format),
    Parse(Parse),
    Function(Function),
    SpawnOrExecute(SpawnOrExecute),
    SelfDivide(SelfDivide),
    Cast(As),
    Replace(Replace),
    BindingReplacement(Binding),
    With(With),
    List(List),
    MethodInvocation(MethodInvocation),
    ClassDefinition(ClassDefinition),
    ClassAccess(ClassAccess),
}
