use arborium_tree_sitter::Node;
#[derive(Debug)]
pub enum RuntimeEffect<'t> {
Node(Node<'t>),
Text(Node<'t>),
Arr,
Push,
EndArr,
Obj,
Set(u16),
EndObj,
Enum(u16),
EndEnum,
Clear,
Null,
}
#[derive(Debug)]
pub struct EffectLog<'t>(Vec<RuntimeEffect<'t>>);
impl<'t> EffectLog<'t> {
pub fn new() -> Self {
Self(Vec::new())
}
#[inline]
pub fn push(&mut self, effect: RuntimeEffect<'t>) {
self.0.push(effect);
}
#[inline]
pub fn len(&self) -> usize {
self.0.len()
}
#[inline]
#[allow(dead_code)]
pub fn is_empty(&self) -> bool {
self.0.is_empty()
}
#[inline]
pub fn truncate(&mut self, watermark: usize) {
self.0.truncate(watermark);
}
pub fn as_slice(&self) -> &[RuntimeEffect<'t>] {
&self.0
}
#[allow(dead_code)]
pub fn into_vec(self) -> Vec<RuntimeEffect<'t>> {
self.0
}
}
impl Default for EffectLog<'_> {
fn default() -> Self {
Self::new()
}
}