character_traits_transformative_abilities/
transform_ability_profile.rs1crate::ix!();
3
4#[derive(Clone, Debug, Getters, Builder, Serialize, Deserialize)]
5#[builder(pattern = "owned", build_fn(skip))]
6pub struct TransformAbilityProfile {
7
8 #[getset(get = "pub")]
9 core_domain: CoreTransformDomain,
10
11 #[getset(get = "pub")]
12 nuanced_attributes: BTreeSet<NuancedTransformAttribute>,
13
14 #[getset(get = "pub")]
16 #[serde(default)]
17 descriptors: Vec<TransformativeAbilityDescriptor>,
18}
19
20impl TransformAbilityProfileBuilder {
21
22 pub fn build(self) -> Result<TransformAbilityProfile, TransformAbilityProfileBuildError> {
24 let core_domain = self
25 .core_domain
26 .ok_or(TransformAbilityProfileBuildError::MissingCoreDomain)?;
27
28 let nuanced_attributes = self
29 .nuanced_attributes
30 .ok_or(TransformAbilityProfileBuildError::MissingAttributeSet)?;
31
32 let descriptors = find_transform_descriptors_for(&core_domain, &nuanced_attributes);
33
34 Ok(TransformAbilityProfile {
35 core_domain,
36 nuanced_attributes,
37 descriptors,
38 })
39 }
40}
41
42impl From<TransformativeAbilityDescriptor> for TransformAbilityProfile {
46 fn from(descriptor: TransformativeAbilityDescriptor) -> Self {
47 let (core_domain, nuanced_attributes) = analyze_transformative_ability_descriptor(&descriptor);
48 TransformAbilityProfile {
49 core_domain,
50 nuanced_attributes,
51 descriptors: vec![descriptor],
52 }
53 }
54}