use luau_lexer::prelude::Token;
use luau_parser_derive::{Print, Range};
use smol_str::SmolStr;
use crate::types::{Bracketed, BracketedList, Expression, Pointer, TypeValue};
#[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub enum TableKey {
#[default]
ERROR,
UndefinedNumber(u32),
UndefinedString(SmolStr),
Simple(Token),
Expression(Bracketed<Pointer<Expression>>),
Type(Bracketed<Pointer<TypeValue>>),
}
#[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub struct TableField {
pub key: Pointer<TableKey>,
pub equal_or_colon: Option<Token>,
pub value: Pointer<TableFieldValue>,
}
#[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord, Range, Print)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub enum TableFieldValue {
#[default]
ERROR,
Expression(Expression),
Type(TypeValue),
VariadicValues(Token),
}
#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Range, Print)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub struct Table(pub BracketedList<TableField>);