crate::ix!();
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");
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;
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); attr!("insight" => NuancedTransformAttribute::Insight);
attr!("integrat" => NuancedTransformAttribute::Integration);
attr!("leader" => NuancedTransformAttribute::Leadership);
attr!("mobil" => NuancedTransformAttribute::Mobility);
attr!("renew" => NuancedTransformAttribute::Renewal);
attr!("nourish" => NuancedTransformAttribute::Renewal); attr!("regener" => NuancedTransformAttribute::Renewal); attr!("resilien" => NuancedTransformAttribute::Resilience);
attr!("strateg" => NuancedTransformAttribute::Strategy);
attr!("unit" => NuancedTransformAttribute::Unity);
attr!("vision" => NuancedTransformAttribute::Vision);
(core, nuanced)
}