arcs_ctf_yaml_parser/
serialize_impl.rs1use serde::{Serialize, ser::SerializeStruct};
2
3use crate::{YamlShape, files::structs::File};
4
5impl Serialize for File {
6 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
7 where
8 S: serde::Serializer {
9
10 let mut base_struct = serializer.serialize_struct("FileEntry", 6)?;
11
12 base_struct.serialize_field("path", self.path())?;
13 base_struct.serialize_field("visible", &self.visible())?;
14
15 if let Some(alias) = self.alias() {
16 base_struct.serialize_field("alias", alias)?;
17 } else {
18 base_struct.skip_field("alias")?;
19 }
20
21 if let Some(cont_type) = self.container() {
22 base_struct.serialize_field("container", cont_type.to_str())?;
23 } else {
24 base_struct.skip_field("container")?;
25 }
26
27 base_struct.serialize_field("size", &self.data().map_or(0, <[_]>::len))?;
28
29 base_struct.end()
30 }
31}
32
33impl Serialize for YamlShape {
34 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
35 where
36 S: serde::Serializer {
37
38 let mut base_struct = serializer.serialize_struct("ChallMeta", 6)?;
39
40 if let Some(files) = self.files() {
41 base_struct.serialize_field("files", files)?;
42
43 } else {
44 base_struct.skip_field("files")?;
45 }
46
47 base_struct.serialize_field("categories", &self.category_str_iter().collect::<Vec<_>>())?;
48 base_struct.serialize_field("hints", self.hints())?;
49 base_struct.serialize_field("authors", self.authors())?;
50
51 base_struct.serialize_field("points", &self.points())?;
52 base_struct.serialize_field("points", &self.points())?;
56
57
58 base_struct.end()
59
60
61 }
76}