bee_ledger/types/
ledger_index.rs

1// Copyright 2020-2021 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4use bee_common::packable::{Packable, Read, Write};
5use bee_message::milestone::MilestoneIndex;
6
7use core::ops::Deref;
8
9/// A wrapper type to represent the current ledger index.
10#[derive(Debug, Clone, Copy, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
11pub struct LedgerIndex(pub MilestoneIndex);
12
13impl LedgerIndex {
14    /// Creates a new `LedgerIndex`.
15    pub fn new(index: MilestoneIndex) -> Self {
16        index.into()
17    }
18}
19
20impl From<MilestoneIndex> for LedgerIndex {
21    fn from(index: MilestoneIndex) -> Self {
22        Self(index)
23    }
24}
25
26impl Deref for LedgerIndex {
27    type Target = <MilestoneIndex as Deref>::Target;
28
29    fn deref(&self) -> &Self::Target {
30        &self.0
31    }
32}
33
34impl Packable for LedgerIndex {
35    type Error = std::io::Error;
36
37    fn packed_len(&self) -> usize {
38        self.0.packed_len()
39    }
40
41    fn pack<W: Write>(&self, writer: &mut W) -> Result<(), Self::Error> {
42        self.0.pack(writer)?;
43
44        Ok(())
45    }
46
47    fn unpack_inner<R: Read + ?Sized, const CHECK: bool>(reader: &mut R) -> Result<Self, Self::Error> {
48        Ok(Self(MilestoneIndex::unpack_inner::<R, CHECK>(reader)?))
49    }
50}