use serde::{Deserialize, Serialize};
use crate::parser::serializer_helper;
use super::tokens::CreatureEffectProperty;
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[serde(rename_all = "camelCase")]
pub struct CreatureEffect {
severity: u32,
probability: u8,
#[serde(skip_serializing_if = "Option::is_none")]
affected_body_parts_by_category: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
affected_body_parts_by_type: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
affected_body_parts_by_token: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
tags: Option<Vec<CreatureEffectProperty>>,
start: u32,
peak: u32,
end: u32,
#[serde(skip_serializing_if = "Option::is_none")]
dwf_stretch: Option<u8>,
}
impl CreatureEffect {
#[must_use]
pub fn cleaned(&self) -> Self {
let mut cleaned = self.clone();
if let Some(affected_body_parts_by_category) =
cleaned.affected_body_parts_by_category.clone()
{
if affected_body_parts_by_category.is_empty() {
cleaned.affected_body_parts_by_category = None;
}
}
if let Some(affected_body_parts_by_type) = cleaned.affected_body_parts_by_type.clone() {
if affected_body_parts_by_type.is_empty() {
cleaned.affected_body_parts_by_type = None;
}
}
if let Some(affected_body_parts_by_token) = cleaned.affected_body_parts_by_token.clone() {
if affected_body_parts_by_token.is_empty() {
cleaned.affected_body_parts_by_token = None;
}
}
if let Some(tags) = cleaned.tags.clone() {
if tags.is_empty() {
cleaned.tags = None;
}
}
if serializer_helper::is_zero_u8(cleaned.dwf_stretch) {
cleaned.dwf_stretch = None;
}
cleaned
}
}