Skip to main content

braid_types/
synced_frame.rs

1// Copyright (C) The Strand-Braid Authors
2// SPDX-License-Identifier: MIT OR Apache-2.0
3
4/// Synchronized frame number across all cameras.
5#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
6pub struct SyncFno(pub u64);
7
8impl std::fmt::Display for SyncFno {
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<u64> for SyncFno {
15    fn from(val: u64) -> SyncFno {
16        SyncFno(val)
17    }
18}
19
20// ---------------------------------------------------------------------------
21// serde helpers for `SyncFno`, which is represented as u64.
22
23impl serde::Serialize for SyncFno {
24    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
25    where
26        S: serde::Serializer,
27    {
28        serializer.serialize_u64(self.0)
29    }
30}
31
32impl<'de> serde::Deserialize<'de> for SyncFno {
33    fn deserialize<D>(deserializer: D) -> std::result::Result<SyncFno, D::Error>
34    where
35        D: serde::Deserializer<'de>,
36    {
37        let val: u64 = deserializer.deserialize_u64(SyncFnoVisitor)?;
38        Ok(SyncFno(val))
39    }
40}
41
42struct SyncFnoVisitor;
43
44impl serde::de::Visitor<'_> for SyncFnoVisitor {
45    type Value = u64;
46
47    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
48        formatter.write_str("an unsigned 64-bit integer")
49    }
50
51    fn visit_u64<E>(self, value: u64) -> std::result::Result<Self::Value, E>
52    where
53        E: serde::de::Error,
54    {
55        Ok(value)
56    }
57}