1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use error::*;
use protocol_common::{ClientPacket, Protocol, ServerPacket};
use serde::{Deserializer, Serializer};

use std::iter::once;

type SerValue = Box<Iterator<Item = Vec<u8>>>;

/// Serializer/Deserialize for the airmash protocol version 5.
#[derive(Copy, Clone, Debug, Default)]
pub struct ProtocolV5;

impl Protocol for ProtocolV5 {
	type SerializeError = SerializeError;
	type DeserializeError = DeserializeError;

	fn version(&self) -> u8 {
		5
	}

	fn serialize_client(&self, packet: &ClientPacket) -> Result<SerValue, SerializeError> {
		Ok(Box::new(once(Serializer::serialize(packet)?)))
	}
	fn serialize_server(&self, packet: &ServerPacket) -> Result<SerValue, SerializeError> {
		Ok(Box::new(once(Serializer::serialize(packet)?)))
	}

	fn deserialize_client(&self, bytes: &[u8]) -> Result<ClientPacket, DeserializeError> {
		Deserializer::deserialize(bytes)
	}
	fn deserialize_server(&self, bytes: &[u8]) -> Result<ServerPacket, DeserializeError> {
		Deserializer::deserialize(bytes)
	}
}