crate::ix!();
#[derive(Clone, Debug, Getters, Builder, Serialize, Deserialize)]
#[builder(pattern = "owned", build_fn(skip))]
pub struct TransformAbilityProfile {
#[getset(get = "pub")]
core_domain: CoreTransformDomain,
#[getset(get = "pub")]
nuanced_attributes: BTreeSet<NuancedTransformAttribute>,
#[getset(get = "pub")]
#[serde(default)]
descriptors: Vec<TransformativeAbilityDescriptor>,
}
impl TransformAbilityProfileBuilder {
pub fn build(self) -> Result<TransformAbilityProfile, TransformAbilityProfileBuildError> {
let core_domain = self
.core_domain
.ok_or(TransformAbilityProfileBuildError::MissingCoreDomain)?;
let nuanced_attributes = self
.nuanced_attributes
.ok_or(TransformAbilityProfileBuildError::MissingAttributeSet)?;
let descriptors = find_transform_descriptors_for(&core_domain, &nuanced_attributes);
Ok(TransformAbilityProfile {
core_domain,
nuanced_attributes,
descriptors,
})
}
}
impl From<TransformativeAbilityDescriptor> for TransformAbilityProfile {
fn from(descriptor: TransformativeAbilityDescriptor) -> Self {
let (core_domain, nuanced_attributes) = analyze_transformative_ability_descriptor(&descriptor);
TransformAbilityProfile {
core_domain,
nuanced_attributes,
descriptors: vec![descriptor],
}
}
}