clipanion-core 0.8.1

A simple but powerful CLI framework
Documentation
use std::collections::HashMap;

use crate::{actions::Check, shared::Arg, transition::Transition};

#[derive(Debug, Default, Clone)]
pub struct Node {
    pub context: usize,
    pub dynamics: Vec<(Check, Transition)>,
    pub shortcuts: Vec<Transition>,
    pub statics: HashMap<Arg, Vec<Transition>>,
}

impl Node {
    pub fn new() -> Node {
        Default::default()
    }

    pub fn clone_to_offset(&self, offset: usize) -> Node {
        let mut out = Node::new();

        for (check, transition) in self.dynamics.iter() {
            out.dynamics.push((check.clone(), transition.clone_to_offset(offset)));
        }

        for transition in self.shortcuts.iter() {
            out.shortcuts.push(transition.clone_to_offset(offset));
        }

        for (key, transitions) in self.statics.iter() {
            out.statics.insert(key.clone(), transitions.iter().map(|t| t.clone_to_offset(offset)).collect::<Vec<_>>());
        }

        out
    }
}