1use serde::{Deserialize, Serialize};
2use std::fmt;
3
4#[derive(
5 Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, Default,
6)]
7pub struct ViewNumber(pub u64);
8
9impl ViewNumber {
10 pub const GENESIS: Self = Self(0);
11
12 pub fn next(self) -> Self {
13 Self(self.0.checked_add(1).expect("view number overflow"))
14 }
15
16 pub fn as_u64(self) -> u64 {
17 self.0
18 }
19}
20
21impl fmt::Display for ViewNumber {
22 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23 write!(f, "v{}", self.0)
24 }
25}
26
27impl From<u64> for ViewNumber {
28 fn from(v: u64) -> Self {
29 Self(v)
30 }
31}