valkyrie-ast 0.0.5

Strong typed abstract syntax tree of valkyrie language
Documentation
use super::*;

impl<E: Display> Display for ViewNode<E> {
    fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
        Display::fmt(&self.base, f)?;
        f.write_char(if self.index0 { '[' } else { '' })?;
        for (idx, item) in self.terms.iter().enumerate() {
            if idx != 0 {
                f.write_str(", ")?;
            }
            Display::fmt(item, f)?;
        }
        f.write_char(if self.index0 { ']' } else { '' })
    }
}

impl<E: Display> Display for ViewTermNode<E> {
    fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
        match self {
            ViewTermNode::Index(v) => Display::fmt(v, f),
            ViewTermNode::Range(v) => Display::fmt(v, f),
        }
    }
}

impl<E: Display> Display for ViewRangeNode<E> {
    fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
        if let Some(start) = &self.start {
            Display::fmt(start, f)?;
        }
        f.write_char(':')?;
        match &self.end {
            Some(end) => {
                Display::fmt(end, f)?;
                f.write_char(':')?;
            }
            None => f.write_str(" :")?,
        }

        if let Some(step) = &self.step {
            Display::fmt(step, f)?;
        }
        Ok(())
    }
}