1use serde::ser::{Serialize, SerializeMap, Serializer};
4
5use crate::Label;
6use crate::value::Value;
7
8impl Serialize for Label {
9 #[inline]
10 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
11 where S: Serializer,
12 {
13 serializer.serialize_bytes(self.as_ref())
14 }
15}
16
17impl Serialize for Value {
18 #[inline]
19 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
20 where S: Serializer,
21 {
22 use self::Value::*;
23
24 match *self {
25 Byte(val) => serializer.serialize_u8(val),
26 Char(val) => serializer.serialize_i8(val),
27 Word(val) => serializer.serialize_u16(val),
28 Short(val) => serializer.serialize_i16(val),
29 Dword(val) => serializer.serialize_u32(val),
30 Int(val) => serializer.serialize_i32(val),
31 Dword64(val) => serializer.serialize_u64(val),
32 Int64(val) => serializer.serialize_i64(val),
33 Float(val) => serializer.serialize_f32(val),
34 Double(val) => serializer.serialize_f64(val),
35 String(ref val) => serializer.serialize_str(&val),
36 ResRef(ref val) => serializer.serialize_bytes(&val.0),
37 LocString(ref _val) => unimplemented!("serialization of LocString not yet implemented"),
39 Void(ref val) => serializer.serialize_bytes(&val),
40 Struct(ref val) => {
41 let mut map = serializer.serialize_map(Some(val.len()))?;
42 for (k, v) in val {
43 map.serialize_key(k)?;
44 map.serialize_value(v)?;
45 }
46 map.end()
47 },
48 List(ref val) => val.serialize(serializer),
49 }
50 }
51}