mod display;
use super::*;
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ApplyDotNode<E> {
pub base: E,
pub caller: IdentifierNode,
pub terms: Vec<ApplyTermNode<IdentifierNode, E>>,
pub range: Range<usize>,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ApplyCallNode<E> {
pub base: E,
pub terms: Vec<ApplyTermNode<IdentifierNode, E>>,
pub range: Range<usize>,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ApplyTermNode<K, V> {
pub key: Option<K>,
pub value: V,
}
pub struct ApplyArgumentNode<E1, E2> {
pub terms: Vec<ArgumentTermNode<IdentifierNode, E1, E2>>,
pub range: Range<usize>,
}
impl<E> ApplyCallNode<E> {
pub fn rebase(mut self: Box<Self>, base: E) -> Box<Self> {
self.base = base;
self
}
}
impl<E> ApplyDotNode<E> {
pub fn rebase(mut self: Box<Self>, base: E) -> Box<Self> {
self.base = base;
self
}
}