character_traits_interpersonal_influence/
influence_profile.rs1crate::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 #[getset(get = "pub")]
16 #[serde(default)]
17 descriptors: Vec<InterpersonalInfluence>,
18}
19
20impl InfluenceProfileBuilder {
21 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
41impl 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}