Skip to main content

character_traits_interpersonal_influence/
influence_profile.rs

1// ---------------- [ File: character-traits-interpersonal-influence/src/influence_profile.rs ]
2crate::ix!();
3
4#[derive(Clone, Debug, Getters, Builder, Serialize, Deserialize)]
5#[builder(pattern = "owned", build_fn(skip))]
6pub struct InfluenceProfile {
7
8    #[getset(get = "pub")]
9    core_quality: CoreInfluenceQuality,
10
11    #[getset(get = "pub")]
12    nuanced_attributes: BTreeSet<NuancedInfluenceAttribute>,
13
14    /// Concrete descriptors that satisfy *(core_quality, nuanced_attributes)*.
15    #[getset(get = "pub")]
16    #[serde(default)]
17    descriptors: Vec<InterpersonalInfluence>,
18}
19
20impl InfluenceProfileBuilder {
21    /// Completes the builder by discovering matching descriptors.
22    pub fn build(self) -> Result<InfluenceProfile, InfluenceProfileBuildError> {
23        let core_quality = self
24            .core_quality
25            .ok_or(InfluenceProfileBuildError::MissingCoreQuality)?;
26
27        let nuanced_attributes = self
28            .nuanced_attributes
29            .ok_or(InfluenceProfileBuildError::MissingAttributeSet)?;
30
31        let descriptors = find_influence_descriptors_for(&core_quality, &nuanced_attributes);
32
33        Ok(InfluenceProfile {
34            core_quality,
35            nuanced_attributes,
36            descriptors,
37        })
38    }
39}
40
41// ---------- single‑descriptor convenience ----------
42
43impl From<InterpersonalInfluence> for InfluenceProfile {
44    fn from(descriptor: InterpersonalInfluence) -> Self {
45        let (core_quality, nuanced_attributes) = analyze_influence_descriptor(&descriptor);
46        InfluenceProfile {
47            core_quality,
48            nuanced_attributes,
49            descriptors: vec![descriptor],
50        }
51    }
52}