rulemorph 0.3.1

YAML-based declarative data transformation engine for CSV/JSON to JSON
Documentation
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(in crate::trace) enum SpanAction {
    Push(u64),
    Pop(Option<u64>),
}

#[derive(Debug, Default)]
pub(super) struct SpanStack {
    ids: Vec<u64>,
}

impl SpanStack {
    pub(super) fn new() -> Self {
        Self { ids: Vec::new() }
    }

    pub(super) fn is_empty(&self) -> bool {
        self.ids.is_empty()
    }

    pub(super) fn current_parent(&self) -> Option<u64> {
        self.ids.last().copied()
    }

    pub(super) fn apply(&mut self, action: Option<SpanAction>) {
        match action {
            Some(SpanAction::Push(id)) => self.ids.push(id),
            Some(SpanAction::Pop(Some(expected))) => {
                if self.ids.last().copied() == Some(expected) {
                    self.ids.pop();
                }
            }
            Some(SpanAction::Pop(None)) | None => {}
        }
    }
}