use super::*;
use core::fmt::Debug;
mod display;
use crate::{ArgumentTerm, ExpressionNode, StringTextNode};
#[doc = include_str!("readme.md")]
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct FormatterNode {
pub terms: Vec<FormatterTerm>,
pub span: Range<u32>,
}
#[derive(Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum FormatterTerm {
Text {
unescaped: StringTextNode,
},
Simple {
argument: ExpressionKind,
formatter: Option<StringTextNode>,
},
Complex {
argument: ExpressionKind,
formatters: Vec<ArgumentTerm>,
},
}
impl ValkyrieNode for FormatterNode {
fn get_range(&self) -> Range<usize> {
Range { start: self.span.start as usize, end: self.span.end as usize }
}
}
impl FormatterNode {
pub fn new(capacity: usize, span: &Range<u32>) -> Self {
Self { terms: Vec::with_capacity(capacity), span: span.clone() }
}
}