use luau_lexer::prelude::Token;
use luau_parser_derive::{Print, Range};
use crate::types::{ExpressionWrap, FunctionCall, Pointer, TableKey};
#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Range, Print)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub enum TableAccessPrefix {
Name(Token),
FunctionCall(Pointer<FunctionCall>),
ExpressionWrap(Pointer<ExpressionWrap>),
}
#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Range, Print)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub struct TableAccess {
pub prefix: TableAccessPrefix,
pub accessed_keys: Vec<TableAccessKey>,
}
#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Range, Print)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub enum TableAccessKey {
Expression(Pointer<TableKey>),
Name {
dot: Pointer<Token>,
name: Pointer<Token>,
},
}