syncat-stylesheet 3.6.0

Parser for Syncat Stylesheets.
Documentation
use regex::Captures;
use std::collections::BTreeMap;

#[derive(Default, Debug)]
pub(crate) struct Matches<'k, 's> {
    matches: BTreeMap<&'k str, &'s str>,
    captures: Vec<Captures<'s>>,
}

impl<'k, 's> Matches<'k, 's> {
    pub(crate) fn get(&self, key: &str) -> Option<&str> {
        self.matches.get(key).copied()
    }

    pub(crate) fn capture(&self, index: usize) -> Option<&str> {
        self.captures
            .iter()
            .flat_map(|captures| captures.iter())
            .nth(index)
            .flatten()
            .map(|m| m.as_str())
    }

    pub(crate) fn insert(&mut self, key: &'k str, value: &'s str) {
        self.matches.insert(key, value);
    }

    pub(crate) fn push(&mut self, captures: Captures<'s>) {
        self.captures.push(captures);
    }

    pub(crate) fn merge(&mut self, mut other: Self) {
        self.matches.append(&mut other.matches);
        self.captures.append(&mut other.captures);
    }
}