use super::*;
use itertools::Itertools as _;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CallExpression {
pub function: Path,
pub const_arguments: Vec<Expression>,
pub arguments: Vec<Expression>,
pub span: Span,
pub id: NodeID,
}
impl fmt::Display for CallExpression {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.function)?;
if !self.const_arguments.is_empty() {
write!(f, "::[{}]", self.const_arguments.iter().format(", "))?;
}
write!(f, "({})", self.arguments.iter().format(", "))
}
}
impl From<CallExpression> for Expression {
fn from(value: CallExpression) -> Self {
Expression::Call(Box::new(value))
}
}
crate::simple_node_impl!(CallExpression);