use super::Located;
use crate::source::SourceSpan;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum BooleanValue {
Literal(bool),
Expression(String),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ComposeScalar {
Null,
Boolean(bool),
Number(String),
String(String),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct KeyValueEntry {
key: Located<String>,
value: Located<ComposeScalar>,
span: SourceSpan,
}
impl KeyValueEntry {
pub(crate) const fn new(key: Located<String>, value: Located<ComposeScalar>, span: SourceSpan) -> Self {
Self { key, value, span }
}
#[must_use]
pub const fn key(&self) -> &Located<String> {
&self.key
}
#[must_use]
pub const fn value(&self) -> &Located<ComposeScalar> {
&self.value
}
#[must_use]
pub const fn span(&self) -> SourceSpan {
self.span
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Labels {
List {
span: SourceSpan,
values: Vec<Located<String>>,
},
Map {
span: SourceSpan,
entries: Vec<KeyValueEntry>,
},
}
impl Labels {
#[must_use]
pub const fn span(&self) -> SourceSpan {
match self {
Self::List { span, .. } | Self::Map { span, .. } => *span,
}
}
}