use super::Expression;
use crate::Span;
use crate::SpannedString;
#[derive(Clone, Debug)]
pub struct TableFieldKeyValue {
pub key: Expression,
pub value: Expression,
pub span: Span,
}
impl TableFieldKeyValue {
pub fn new(key: Expression, value: Expression, span: Span) -> Self {
Self { key, value, span }
}
pub fn span(&self) -> Span {
self.span
}
}
#[derive(Clone, Debug)]
pub struct TableFieldNameValue {
pub name: SpannedString,
pub value: Expression,
pub span: Span,
}
impl TableFieldNameValue {
pub fn new(name: SpannedString, value: Expression, span: Span) -> Self {
Self { name, value, span }
}
pub fn span(&self) -> Span {
self.span
}
}
#[derive(Clone, Debug)]
pub struct TableFieldValue {
pub value: Expression,
}
impl TableFieldValue {
pub fn new(value: Expression) -> Self {
Self { value }
}
}
#[derive(Clone, Debug)]
pub enum TableField {
KeyValue(TableFieldKeyValue),
NameValue(TableFieldNameValue),
Value(TableFieldValue),
}
#[derive(Clone, Debug)]
pub struct ExprTable {
pub fields: Vec<TableField>,
pub span: Span,
}
impl ExprTable {
pub fn new(fields: Vec<TableField>, span: Span) -> Self {
Self { fields, span }
}
pub fn span(&self) -> Span {
self.span
}
}