cdragon_prop/
serializer.rs1use std::io;
9use super::{
10 BinEntry,
11 PropFile,
12 data::*,
13};
14
15#[allow(missing_docs)]
17pub trait BinSerializer {
18 type EntriesSerializer: BinEntriesSerializer;
19
20 fn write_entry(&mut self, v: &BinEntry) -> io::Result<()>;
22 fn write_entries(self) -> io::Result<Self::EntriesSerializer>;
24
25 fn write_binfile(self, v: &PropFile) -> io::Result<()> where Self: Sized {
27 let mut s = self.write_entries()?;
28 for entry in &v.entries {
29 s.write_entry(entry)?;
30 }
31 s.end()?;
32 Ok(())
33 }
34
35 fn write_none(&mut self, v: &BinNone) -> io::Result<()>;
37 fn write_bool(&mut self, v: &BinBool) -> io::Result<()>;
38 fn write_s8(&mut self, v: &BinS8) -> io::Result<()>;
39 fn write_u8(&mut self, v: &BinU8) -> io::Result<()>;
40 fn write_s16(&mut self, v: &BinS16) -> io::Result<()>;
41 fn write_u16(&mut self, v: &BinU16) -> io::Result<()>;
42 fn write_s32(&mut self, v: &BinS32) -> io::Result<()>;
43 fn write_u32(&mut self, v: &BinU32) -> io::Result<()>;
44 fn write_s64(&mut self, v: &BinS64) -> io::Result<()>;
45 fn write_u64(&mut self, v: &BinU64) -> io::Result<()>;
46 fn write_float(&mut self, v: &BinFloat) -> io::Result<()>;
47 fn write_vec2(&mut self, v: &BinVec2) -> io::Result<()>;
48 fn write_vec3(&mut self, v: &BinVec3) -> io::Result<()>;
49 fn write_vec4(&mut self, v: &BinVec4) -> io::Result<()>;
50 fn write_matrix(&mut self, v: &BinMatrix) -> io::Result<()>;
51 fn write_color(&mut self, v: &BinColor) -> io::Result<()>;
52 fn write_string(&mut self, v: &BinString) -> io::Result<()>;
53 fn write_hash(&mut self, v: &BinHash) -> io::Result<()>;
54 fn write_path(&mut self, v: &BinPath) -> io::Result<()>;
55 fn write_link(&mut self, v: &BinLink) -> io::Result<()>;
56 fn write_flag(&mut self, v: &BinFlag) -> io::Result<()>;
57
58 fn write_list(&mut self, v: &BinList) -> io::Result<()>;
60 fn write_struct(&mut self, v: &BinStruct) -> io::Result<()>;
61 fn write_embed(&mut self, v: &BinEmbed) -> io::Result<()>;
62 fn write_option(&mut self, v: &BinOption) -> io::Result<()>;
63 fn write_map(&mut self, v: &BinMap) -> io::Result<()>;
64}
65
66pub trait BinEntriesSerializer {
68 fn write_entry(&mut self, entry: &BinEntry) -> io::Result<()>;
70 fn end(&mut self) -> io::Result<()>;
74}
75
76
77pub trait BinSerializable {
81 fn serialize_bin<S: BinSerializer>(&self, s: &mut S) -> io::Result<()>;
82}
83
84macro_rules! impl_serializable {
85 ($type:ty, $func:ident) => {
86 impl BinSerializable for $type {
87 fn serialize_bin<S: BinSerializer>(&self, s: &mut S) -> io::Result<()> {
89 s.$func(self)
90 }
91 }
92 }
93}
94
95impl_serializable!(BinNone, write_none);
96impl_serializable!(BinBool, write_bool);
97impl_serializable!(BinS8, write_s8);
98impl_serializable!(BinU8, write_u8);
99impl_serializable!(BinS16, write_s16);
100impl_serializable!(BinU16, write_u16);
101impl_serializable!(BinS32, write_s32);
102impl_serializable!(BinU32, write_u32);
103impl_serializable!(BinS64, write_s64);
104impl_serializable!(BinU64, write_u64);
105impl_serializable!(BinFloat, write_float);
106impl_serializable!(BinVec2, write_vec2);
107impl_serializable!(BinVec3, write_vec3);
108impl_serializable!(BinVec4, write_vec4);
109impl_serializable!(BinMatrix, write_matrix);
110impl_serializable!(BinColor, write_color);
111impl_serializable!(BinString, write_string);
112impl_serializable!(BinHash, write_hash);
113impl_serializable!(BinPath, write_path);
114impl_serializable!(BinList, write_list);
115impl_serializable!(BinStruct, write_struct);
116impl_serializable!(BinEmbed, write_embed);
117impl_serializable!(BinLink, write_link);
118impl_serializable!(BinOption, write_option);
119impl_serializable!(BinMap, write_map);
120impl_serializable!(BinFlag, write_flag);
121