libsignal_protocol/
timestamp.rs1use serde::{Deserialize, Serialize};
7
8#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
10#[repr(transparent)]
11pub struct Timestamp(u64);
12
13impl Timestamp {
14 pub const fn from_epoch_millis(milliseconds: u64) -> Self {
15 Self(milliseconds)
16 }
17
18 pub const fn epoch_millis(&self) -> u64 {
19 self.0
20 }
21
22 pub fn add_millis(&self, milliseconds: u64) -> Self {
23 Self(self.0 + milliseconds)
24 }
25
26 pub fn sub_millis(&self, milliseconds: u64) -> Timestamp {
27 Self(self.0 - milliseconds)
28 }
29}
30
31impl From<Timestamp> for std::time::SystemTime {
32 fn from(value: Timestamp) -> Self {
33 Self::UNIX_EPOCH + std::time::Duration::from_millis(value.epoch_millis())
34 }
35}
36
37impl rand::distributions::Distribution<Timestamp> for rand::distributions::Standard {
38 fn sample<R: rand::prelude::Rng + ?Sized>(&self, rng: &mut R) -> Timestamp {
39 Timestamp(Self::sample(self, rng))
40 }
41}