use super::*;
use crate::StatementBlock;
use core::ops::AddAssign;
mod display;
#[derive(Clone, Default, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ArgumentsList {
pub terms: Vec<ArgumentTerm>,
}
impl AddAssign<ArgumentTerm> for ArgumentsList {
fn add_assign(&mut self, rhs: ArgumentTerm) {
self.terms.push(rhs)
}
}
impl Debug for ArgumentsList {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
f.debug_list().entries(self.terms.iter()).finish()
}
}
#[derive(Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ArgumentTerm {
pub modifiers: ModifierList,
pub key: ArgumentKey,
pub value: ExpressionKind,
}
#[derive(Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ArgumentKey {
Nothing,
Symbol(IdentifierNode),
}
impl ArgumentsList {
pub fn new(capacity: usize) -> Self {
Self { terms: Vec::with_capacity(capacity) }
}
}