civ_map_generator 0.1.5

A civilization map generator
Documentation
use std::sync::LazyLock;

use regex::Regex;

#[derive(Debug)]
pub struct Unique {
    pub placeholder_text: String,
    pub params: Vec<String>,
    pub conditionals: Vec<Unique>,
}

impl Unique {
    pub fn new(unique: &str) -> Self {
        static PARAMS_REGEX: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"\[(.+?)\]").unwrap());
        static CONDITION_REGEX: LazyLock<Regex> =
            LazyLock::new(|| Regex::new(r"<([^>]*)>").unwrap());

        let unique_without_conditionals = CONDITION_REGEX.replace_all(unique, "");
        let unique_without_conditionals = unique_without_conditionals.trim();

        let placeholder_text = PARAMS_REGEX
            .replace_all(unique_without_conditionals, "[]")
            .to_string();

        let params = PARAMS_REGEX
            .captures_iter(unique_without_conditionals)
            .map(|cap| cap[1].to_owned())
            .collect();

        let conditionals = CONDITION_REGEX
            .captures_iter(unique)
            .map(|cap| Self::new(&cap[1]))
            .collect();

        Self {
            placeholder_text,
            params,
            conditionals,
        }
    }
}