1#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
6pub struct CamNum(pub u8);
7
8impl std::fmt::Display for CamNum {
9 fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::result::Result<(), std::fmt::Error> {
10 std::fmt::Display::fmt(&self.0, fmt)
11 }
12}
13
14impl From<u8> for CamNum {
15 fn from(val: u8) -> CamNum {
16 CamNum(val)
17 }
18}
19
20impl serde::Serialize for CamNum {
24 fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
25 where
26 S: serde::Serializer,
27 {
28 serializer.serialize_u8(self.0)
29 }
30}
31
32impl<'de> serde::Deserialize<'de> for CamNum {
33 fn deserialize<D>(deserializer: D) -> std::result::Result<CamNum, D::Error>
34 where
35 D: serde::Deserializer<'de>,
36 {
37 let val: u8 = deserializer.deserialize_u8(CamNumVisitor)?;
38 Ok(CamNum(val))
39 }
40}
41
42struct CamNumVisitor;
43
44impl serde::de::Visitor<'_> for CamNumVisitor {
45 type Value = u8;
46
47 fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
48 formatter.write_str("an unsigned 8-bit integer")
49 }
50
51 fn visit_u8<E>(self, value: u8) -> std::result::Result<Self::Value, E>
52 where
53 E: serde::de::Error,
54 {
55 Ok(value)
56 }
57}