dfraw_json_parser/parser/creature_effect/
raw.rs1use serde::{Deserialize, Serialize};
2
3use crate::parser::serializer_helper;
4
5use super::tokens::CreatureEffectProperty;
6
7#[derive(Serialize, Deserialize, Debug, Clone, Default)]
9#[serde(rename_all = "camelCase")]
10pub struct CreatureEffect {
11 severity: u32,
12 probability: u8,
13
14 #[serde(skip_serializing_if = "Option::is_none")]
15 affected_body_parts_by_category: Option<Vec<String>>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 affected_body_parts_by_type: Option<Vec<String>>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 affected_body_parts_by_token: Option<Vec<String>>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 tags: Option<Vec<CreatureEffectProperty>>,
22
23 start: u32,
24 peak: u32,
25 end: u32,
26
27 #[serde(skip_serializing_if = "Option::is_none")]
28 dwf_stretch: Option<u8>,
29}
30
31impl CreatureEffect {
32 #[must_use]
43 pub fn cleaned(&self) -> Self {
44 let mut cleaned = self.clone();
45
46 if let Some(affected_body_parts_by_category) =
48 cleaned.affected_body_parts_by_category.clone()
49 {
50 if affected_body_parts_by_category.is_empty() {
51 cleaned.affected_body_parts_by_category = None;
52 }
53 }
54
55 if let Some(affected_body_parts_by_type) = cleaned.affected_body_parts_by_type.clone() {
57 if affected_body_parts_by_type.is_empty() {
58 cleaned.affected_body_parts_by_type = None;
59 }
60 }
61
62 if let Some(affected_body_parts_by_token) = cleaned.affected_body_parts_by_token.clone() {
64 if affected_body_parts_by_token.is_empty() {
65 cleaned.affected_body_parts_by_token = None;
66 }
67 }
68
69 if let Some(tags) = cleaned.tags.clone() {
71 if tags.is_empty() {
72 cleaned.tags = None;
73 }
74 }
75
76 if serializer_helper::is_zero_u8(cleaned.dwf_stretch) {
78 cleaned.dwf_stretch = None;
79 }
80
81 cleaned
82 }
83}