pabitell_lib/
data.rs

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}