character-traits-transformative-abilities 0.1.0

A Rust crate providing a conceptual framework for defining and analyzing transformative abilities using complex attributes and domains.
Documentation
// ---------------- [ File: character-traits-transformative-abilities/src/analyze_transformative_ability_descriptor.rs ]
crate::ix!();

/// Extracts the core domain and nuanced attributes from one concrete
/// descriptor variant.
///
/// The **earliest keyword occurrence** decides the core domain,
/// providing deterministic precedence.
pub fn analyze_transformative_ability_descriptor(
    descriptor: &TransformativeAbilityDescriptor,
) -> (CoreTransformDomain, BTreeSet<NuancedTransformAttribute>) {
    use CoreTransformDomain::*;

    let raw     = format!("{descriptor:?}");
    let lowered = raw.to_ascii_lowercase();
    trace!(%raw, "analysing transformative ability descriptor");

    // ---------- core domain (earliest‑match wins) ----------
    let mut earliest = (usize::MAX, CoreTransformDomain::None);

    macro_rules! consider {
        ($domain:expr, [$($pat:literal),+]) => {
            $(
                if let Some(idx) = lowered.find($pat) {
                    if idx < earliest.0 {
                        earliest = (idx, $domain);
                    }
                }
            )+
        };
    }

    consider!(PersonalGrowth,       ["self", "personal", "inner"]);
    consider!(SocietalChange,       ["societ", "social", "justice", "community", "civil"]);
    consider!(ScientificProgress,   ["scient", "technolog", "quantum", "ai", "interdisciplin"]);
    consider!(SpiritualAwakening,   ["spirit", "divine", "faith", "mystic"]);
    consider!(LeadershipGovernance, ["govern", "policy", "nation", "empire", "leader"]);
    consider!(ArtisticCultural,     ["art", "cultur", "design", "performance", "circus"]);
    consider!(EcologicalRenewal,    ["eco", "forest", "landscape", "renewal", "nourish"]);
    consider!(StrategicMastery,     ["strateg", "manipulat", "conquest"]);
    consider!(AdaptationResilience, ["adaptat", "resilien", "survival"]);
    consider!(Empowerment,          ["empower", "enhanc", "strength"]);

    let core = earliest.1;

    // ---------- nuanced attributes ----------
    let mut nuanced = BTreeSet::<NuancedTransformAttribute>::new();
    macro_rules! attr {
        ($pat:literal => $variant:expr) => {
            if lowered.contains($pat) {
                nuanced.insert($variant);
            }
        };
    }

    attr!("adaptat"   => NuancedTransformAttribute::Adaptation);
    attr!("agency"    => NuancedTransformAttribute::Agency);
    attr!("alchemy"   => NuancedTransformAttribute::Alchemy);
    attr!("awaken"    => NuancedTransformAttribute::Awakening);
    attr!("challeng"  => NuancedTransformAttribute::Challenge);
    attr!("complex"   => NuancedTransformAttribute::Complexity);
    attr!("conquest"  => NuancedTransformAttribute::Conquest);
    attr!("creativ"   => NuancedTransformAttribute::Creativity);
    attr!("destin"    => NuancedTransformAttribute::Destiny);
    attr!("discover"  => NuancedTransformAttribute::Discovery);
    attr!("divers"    => NuancedTransformAttribute::Diversity);
    attr!("empath"    => NuancedTransformAttribute::Empathy);
    attr!("enlighten" => NuancedTransformAttribute::Enlightenment);
    attr!("evolut"    => NuancedTransformAttribute::Evolution);
    attr!("heal"      => NuancedTransformAttribute::Healing);
    attr!("herit"     => NuancedTransformAttribute::Heritage);
    attr!("innovat"   => NuancedTransformAttribute::Innovation);
    attr!("advanc"    => NuancedTransformAttribute::Innovation);   // NEW: captures “Advances…”
    attr!("insight"   => NuancedTransformAttribute::Insight);
    attr!("integrat"  => NuancedTransformAttribute::Integration);
    attr!("leader"    => NuancedTransformAttribute::Leadership);
    attr!("mobil"     => NuancedTransformAttribute::Mobility);
    attr!("renew"     => NuancedTransformAttribute::Renewal);
    attr!("nourish"   => NuancedTransformAttribute::Renewal);      // NEW: captures “Nourishment”
    attr!("regener"   => NuancedTransformAttribute::Renewal);      // NEW: captures “Regeneration”
    attr!("resilien"  => NuancedTransformAttribute::Resilience);
    attr!("strateg"   => NuancedTransformAttribute::Strategy);
    attr!("unit"      => NuancedTransformAttribute::Unity);
    attr!("vision"    => NuancedTransformAttribute::Vision);

    (core, nuanced)
}