arcs_ctf_yaml_parser/
serialize_impl.rs

1use 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("flag", &self.fla())?;
53        // TODO: Make this work ig
54
55        base_struct.serialize_field("points", &self.points())?;
56
57
58        base_struct.end()
59
60
61        // authors: Authors,
62        // categories: Categories,
63        // hints: Hints,
64        // files: Option<Files>,
65    
66        // deploy: Option<DeployOptions>,
67    
68        // points: u64,
69        // flag: Flag,
70        
71        // name: String,
72        // description: String,
73    
74        // visible: bool,
75    }
76}