1use serde::{de::DeserializeOwned, Deserialize, Serialize};
2
3pub trait EventData: Serialize + DeserializeOwned + PartialEq {
4 fn initiator(&self) -> String;
5
6 fn set_initiator(&mut self, initiator: String);
7}
8
9#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
10pub struct PickData {
11 pub character: String,
12 pub item: String,
13}
14
15impl PickData {
16 pub fn new<SC, SI>(character: SC, item: SI) -> Self
17 where
18 SC: ToString,
19 SI: ToString,
20 {
21 Self {
22 character: character.to_string(),
23 item: item.to_string(),
24 }
25 }
26}
27impl EventData for PickData {
28 fn initiator(&self) -> String {
29 self.character.clone()
30 }
31 fn set_initiator(&mut self, initiator: String) {
32 self.character = initiator;
33 }
34}
35
36#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
37pub struct GiveData {
38 pub from_character: String,
39 pub to_character: String,
40 pub item: String,
41}
42
43impl GiveData {
44 pub fn new<SFC, STC, SI>(from_character: SFC, to_character: STC, item: SI) -> Self
45 where
46 SFC: ToString,
47 STC: ToString,
48 SI: ToString,
49 {
50 Self {
51 from_character: from_character.to_string(),
52 to_character: to_character.to_string(),
53 item: item.to_string(),
54 }
55 }
56}
57impl EventData for GiveData {
58 fn initiator(&self) -> String {
59 self.to_character.clone()
60 }
61 fn set_initiator(&mut self, initiator: String) {
62 self.to_character = initiator;
63 }
64}
65
66#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
67pub struct UseItemData {
68 pub character: String,
69 pub item: String,
70}
71
72impl UseItemData {
73 pub fn new<SC, SI>(character: SC, item: SI) -> Self
74 where
75 SC: ToString,
76 SI: ToString,
77 {
78 Self {
79 character: character.to_string(),
80 item: item.to_string(),
81 }
82 }
83}
84impl EventData for UseItemData {
85 fn initiator(&self) -> String {
86 self.character.clone()
87 }
88 fn set_initiator(&mut self, initiator: String) {
89 self.character = initiator;
90 }
91}
92
93#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
94pub struct MoveData {
95 pub character: String,
96 pub scene: String,
97}
98
99impl MoveData {
100 pub fn new<SC, SS>(character: SC, scene: SS) -> Self
101 where
102 SC: ToString,
103 SS: ToString,
104 {
105 Self {
106 character: character.to_string(),
107 scene: scene.to_string(),
108 }
109 }
110}
111impl EventData for MoveData {
112 fn initiator(&self) -> String {
113 self.character.clone()
114 }
115 fn set_initiator(&mut self, initiator: String) {
116 self.character = initiator;
117 }
118}
119
120#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
121pub struct VoidData {
122 pub character: String,
123 pub item: Option<String>,
124}
125
126impl VoidData {
127 pub fn new<SC, SI>(character: SC, item: Option<SI>) -> Self
128 where
129 SI: ToString,
130 SC: ToString,
131 {
132 Self {
133 character: character.to_string(),
134 item: item.map(|e| e.to_string()),
135 }
136 }
137}
138impl EventData for VoidData {
139 fn initiator(&self) -> String {
140 self.character.clone()
141 }
142 fn set_initiator(&mut self, initiator: String) {
143 self.character = initiator;
144 }
145}
146
147#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
148pub struct TalkData {
149 pub character: String,
150 pub scene: String,
151 pub dialog: usize,
152}
153
154impl TalkData {
155 pub fn new<SC, SS>(character: SC, scene: SS, dialog: usize) -> Self
156 where
157 SS: ToString,
158 SC: ToString,
159 {
160 Self {
161 character: character.to_string(),
162 scene: scene.to_string(),
163 dialog,
164 }
165 }
166}
167impl EventData for TalkData {
168 fn initiator(&self) -> String {
169 self.character.clone()
170 }
171 fn set_initiator(&mut self, initiator: String) {
172 self.character = initiator;
173 }
174}