aboutsummaryrefslogtreecommitdiff
path: root/src/structs/ser.rs
diff options
context:
space:
mode:
authorIgor Tolmachev <me@igorek.dev>2024-06-16 21:36:13 +0900
committerIgor Tolmachev <me@igorek.dev>2024-06-23 15:34:34 +0900
commitd6055b5ac4f3ff5016bc4881cf1cc109a22c40ba (patch)
tree40a9044f923945e6effc13c627261630dddc574c /src/structs/ser.rs
parent6444bee8f3e188be014841ea8cd7cfb53eb03ed9 (diff)
downloadarchivator-d6055b5ac4f3ff5016bc4881cf1cc109a22c40ba.tar.gz
archivator-d6055b5ac4f3ff5016bc4881cf1cc109a22c40ba.zip
Implement serialize
Diffstat (limited to 'src/structs/ser.rs')
-rw-r--r--src/structs/ser.rs339
1 files changed, 338 insertions, 1 deletions
diff --git a/src/structs/ser.rs b/src/structs/ser.rs
index a3fe291..8aa95a5 100644
--- a/src/structs/ser.rs
+++ b/src/structs/ser.rs
@@ -1,6 +1,343 @@
1use crate::structs::{Settings, StructError, StructResult};
1use crate::ArchiveError; 2use crate::ArchiveError;
2use serde::{ser, Serialize}; 3use serde::{ser, Serialize};
3 4
4pub struct ArchiveSerializer { 5pub struct ArchiveSerializer {
5 bin: Vec<u8>, 6 bytes: Vec<u8>,
7 settings: Settings,
8}
9
10impl ArchiveSerializer {
11 pub fn new(settings: Settings) -> Self {
12 Self {
13 bytes: Vec::new(),
14 settings,
15 }
16 }
17
18 pub fn to_bytes(self) -> Vec<u8> {
19 self.bytes
20 }
21}
22
23impl ser::Serializer for &mut ArchiveSerializer {
24 type Ok = ();
25 type Error = ArchiveError<StructError>;
26
27 type SerializeSeq = Self;
28 type SerializeTuple = Self;
29 type SerializeTupleStruct = Self;
30 type SerializeTupleVariant = Self;
31 type SerializeMap = Self;
32 type SerializeStruct = Self;
33 type SerializeStructVariant = Self;
34
35 fn serialize_bool(self, v: bool) -> StructResult<()> {
36 self.bytes.push(v as u8);
37 Ok(())
38 }
39
40 fn serialize_i8(self, v: i8) -> StructResult<()> {
41 self.bytes.push(v as u8);
42 Ok(())
43 }
44
45 fn serialize_i16(self, v: i16) -> StructResult<()> {
46 self.bytes.append(&mut self.settings.byte_order.i16(v));
47 Ok(())
48 }
49
50 fn serialize_i32(self, v: i32) -> StructResult<()> {
51 self.bytes.append(&mut self.settings.byte_order.i32(v));
52 Ok(())
53 }
54
55 fn serialize_i64(self, v: i64) -> StructResult<()> {
56 self.bytes.append(&mut self.settings.byte_order.i64(v));
57 Ok(())
58 }
59
60 fn serialize_u8(self, v: u8) -> StructResult<()> {
61 self.bytes.push(v);
62 Ok(())
63 }
64
65 fn serialize_u16(self, v: u16) -> StructResult<()> {
66 self.bytes.append(&mut self.settings.byte_order.u16(v));
67 Ok(())
68 }
69
70 fn serialize_u32(self, v: u32) -> StructResult<()> {
71 self.bytes.append(&mut self.settings.byte_order.u32(v));
72 Ok(())
73 }
74
75 fn serialize_u64(self, v: u64) -> StructResult<()> {
76 self.bytes.append(&mut self.settings.byte_order.u64(v));
77 Ok(())
78 }
79
80 fn serialize_f32(self, v: f32) -> StructResult<()> {
81 self.bytes.append(&mut self.settings.byte_order.f32(v));
82 Ok(())
83 }
84
85 fn serialize_f64(self, v: f64) -> StructResult<()> {
86 self.bytes.append(&mut self.settings.byte_order.f64(v));
87 Ok(())
88 }
89
90 fn serialize_char(self, v: char) -> StructResult<()> {
91 self.bytes.push(v as u8);
92 Ok(())
93 }
94
95 fn serialize_str(self, v: &str) -> StructResult<()> {
96 self.bytes.append(&mut v.as_bytes().to_vec());
97 Ok(())
98 }
99
100 fn serialize_bytes(self, v: &[u8]) -> StructResult<()> {
101 self.bytes.append(&mut v.to_vec());
102 Ok(())
103 }
104
105 fn serialize_none(self) -> StructResult<()> {
106 Ok(())
107 }
108
109 fn serialize_some<T>(self, value: &T) -> StructResult<()>
110 where
111 T: ?Sized + Serialize,
112 {
113 value.serialize(self)
114 }
115
116 fn serialize_unit(self) -> StructResult<()> {
117 Ok(())
118 }
119
120 fn serialize_unit_struct(self, _name: &'static str) -> StructResult<()> {
121 self.serialize_unit()
122 }
123
124 fn serialize_unit_variant(
125 self,
126 _name: &'static str,
127 variant_index: u32,
128 _variant: &'static str,
129 ) -> StructResult<()> {
130 self.bytes.append(
131 &mut self
132 .settings
133 .variant_index_type
134 .cast(variant_index, &self.settings.byte_order)?,
135 );
136 Ok(())
137 }
138
139 fn serialize_newtype_struct<T>(self, _name: &'static str, value: &T) -> StructResult<()>
140 where
141 T: ?Sized + Serialize,
142 {
143 value.serialize(self)
144 }
145
146 fn serialize_newtype_variant<T>(
147 self,
148 _name: &'static str,
149 variant_index: u32,
150 _variant: &'static str,
151 value: &T,
152 ) -> StructResult<()>
153 where
154 T: ?Sized + Serialize,
155 {
156 self.bytes.append(
157 &mut self
158 .settings
159 .variant_index_type
160 .cast(variant_index, &self.settings.byte_order)?,
161 );
162 value.serialize(self)
163 }
164
165 fn serialize_seq(self, _len: Option<usize>) -> StructResult<Self::SerializeSeq> {
166 Ok(self)
167 }
168
169 fn serialize_tuple(self, _len: usize) -> StructResult<Self::SerializeTuple> {
170 Ok(self)
171 }
172
173 fn serialize_tuple_struct(
174 self,
175 _name: &'static str,
176 _len: usize,
177 ) -> StructResult<Self::SerializeTupleStruct> {
178 Ok(self)
179 }
180
181 fn serialize_tuple_variant(
182 self,
183 _name: &'static str,
184 variant_index: u32,
185 _variant: &'static str,
186 _len: usize,
187 ) -> StructResult<Self::SerializeTupleVariant> {
188 self.bytes.append(
189 &mut self
190 .settings
191 .variant_index_type
192 .cast(variant_index, &self.settings.byte_order)?,
193 );
194 Ok(self)
195 }
196
197 fn serialize_map(self, _len: Option<usize>) -> StructResult<Self::SerializeMap> {
198 Ok(self)
199 }
200
201 fn serialize_struct(
202 self,
203 _name: &'static str,
204 _len: usize,
205 ) -> StructResult<Self::SerializeStruct> {
206 Ok(self)
207 }
208
209 fn serialize_struct_variant(
210 self,
211 _name: &'static str,
212 variant_index: u32,
213 _variant: &'static str,
214 _len: usize,
215 ) -> StructResult<Self::SerializeStructVariant> {
216 self.bytes.append(
217 &mut self
218 .settings
219 .variant_index_type
220 .cast(variant_index, &self.settings.byte_order)?,
221 );
222 Ok(self)
223 }
224}
225
226impl ser::SerializeSeq for &mut ArchiveSerializer {
227 type Ok = ();
228 type Error = ArchiveError<StructError>;
229
230 fn serialize_element<T>(&mut self, value: &T) -> StructResult<()>
231 where
232 T: ?Sized + Serialize,
233 {
234 value.serialize(&mut **self)
235 }
236
237 fn end(self) -> StructResult<()> {
238 Ok(())
239 }
240}
241
242impl ser::SerializeTuple for &mut ArchiveSerializer {
243 type Ok = ();
244 type Error = ArchiveError<StructError>;
245
246 fn serialize_element<T>(&mut self, value: &T) -> StructResult<()>
247 where
248 T: ?Sized + Serialize,
249 {
250 value.serialize(&mut **self)
251 }
252
253 fn end(self) -> StructResult<()> {
254 Ok(())
255 }
256}
257
258impl ser::SerializeTupleStruct for &mut ArchiveSerializer {
259 type Ok = ();
260 type Error = ArchiveError<StructError>;
261
262 fn serialize_field<T>(&mut self, value: &T) -> StructResult<()>
263 where
264 T: ?Sized + Serialize,
265 {
266 value.serialize(&mut **self)
267 }
268
269 fn end(self) -> StructResult<()> {
270 Ok(())
271 }
272}
273
274impl ser::SerializeTupleVariant for &mut ArchiveSerializer {
275 type Ok = ();
276 type Error = ArchiveError<StructError>;
277
278 fn serialize_field<T>(&mut self, value: &T) -> StructResult<()>
279 where
280 T: ?Sized + Serialize,
281 {
282 value.serialize(&mut **self)
283 }
284
285 fn end(self) -> StructResult<()> {
286 Ok(())
287 }
288}
289
290impl ser::SerializeMap for &mut ArchiveSerializer {
291 type Ok = ();
292 type Error = ArchiveError<StructError>;
293
294 fn serialize_key<T>(&mut self, key: &T) -> StructResult<()>
295 where
296 T: ?Sized + Serialize,
297 {
298 key.serialize(&mut **self)
299 }
300
301 fn serialize_value<T>(&mut self, value: &T) -> StructResult<()>
302 where
303 T: ?Sized + Serialize,
304 {
305 value.serialize(&mut **self)
306 }
307
308 fn end(self) -> StructResult<()> {
309 Ok(())
310 }
311}
312
313impl ser::SerializeStruct for &mut ArchiveSerializer {
314 type Ok = ();
315 type Error = ArchiveError<StructError>;
316
317 fn serialize_field<T>(&mut self, _key: &'static str, value: &T) -> StructResult<()>
318 where
319 T: ?Sized + Serialize,
320 {
321 value.serialize(&mut **self)
322 }
323
324 fn end(self) -> StructResult<()> {
325 Ok(())
326 }
327}
328
329impl ser::SerializeStructVariant for &mut ArchiveSerializer {
330 type Ok = ();
331 type Error = ArchiveError<StructError>;
332
333 fn serialize_field<T>(&mut self, _key: &'static str, value: &T) -> StructResult<()>
334 where
335 T: ?Sized + Serialize,
336 {
337 value.serialize(&mut **self)
338 }
339
340 fn end(self) -> StructResult<()> {
341 Ok(())
342 }
6} 343}