1use crate::serializer::SerializeError::UnknownVersion;
2use crate::serializer::{Serializable, SerializeError};
3
4#[derive(PartialEq, Copy, Clone, Debug)]
5pub enum Version {
6 MustBeDiscarded, Version1, Version2, Unknown,
10}
11
12impl Version {
13 pub fn from_u8(value: u8) -> Self {
14 match value {
15 0 => Version::MustBeDiscarded,
16 1 => Version::Version1,
17 2 => Version::Version2,
18 _ => Version::Unknown,
19 }
20 }
21
22 pub fn to_u8(&self) -> Option<u8> {
23 match self {
24 Version::MustBeDiscarded => Some(0),
25 Version::Version1 => Some(1),
26 Version::Version2 => Some(2),
27 Version::Unknown => None,
28 }
29 }
30}
31
32impl Serializable for Version {
33 fn to_bytes(&self) -> Result<Vec<u8>, SerializeError> {
34 match self.to_u8() {
35 Some(byte) => Ok(vec![byte]),
36 None => Err(UnknownVersion),
37 }
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use crate::serializer::Serializable;
44 use crate::serializer::SerializeError::UnknownVersion;
45 use crate::version;
46 use crate::version::Version::{MustBeDiscarded, Unknown, Version1, Version2};
47
48 #[test]
49 fn test_from_u8() {
50 assert_eq!(version::Version::from_u8(0), MustBeDiscarded);
51 assert_eq!(version::Version::from_u8(1), Version1);
52 assert_eq!(version::Version::from_u8(2), Version2);
53 assert_eq!(version::Version::from_u8(3), Unknown);
54 }
55
56 #[test]
57 fn test_to_bytes() {
58 assert_eq!(MustBeDiscarded.to_bytes().unwrap(), vec![0x00]);
59 assert_eq!(Version1.to_bytes().unwrap(), vec![0x01]);
60 assert_eq!(Version2.to_bytes().unwrap(), vec![0x02]);
61 assert_eq!(Unknown.to_bytes().unwrap_err(), UnknownVersion);
62 }
63}