use std::{fmt, mem::size_of};
use borsh::{BorshDeserialize, BorshSerialize};
use serde::{Deserialize, Serialize};
#[derive(
BorshSerialize,
BorshDeserialize,
Clone,
Copy,
Debug,
Default,
Deserialize,
Eq,
Ord,
PartialEq,
PartialOrd,
Serialize,
)]
pub struct EpochId(pub u64);
impl EpochId {
pub const BORSH_SERIALIZED_SIZE: usize = size_of::<u64>();
}
impl fmt::Display for EpochId {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(
BorshSerialize,
BorshDeserialize,
Clone,
Copy,
Debug,
Default,
Deserialize,
Eq,
Ord,
PartialEq,
PartialOrd,
Serialize,
)]
pub struct CommitteeIndex(pub u32);
impl CommitteeIndex {
pub const BORSH_SERIALIZED_SIZE: usize = size_of::<u32>();
}
impl fmt::Display for CommitteeIndex {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(
BorshSerialize,
BorshDeserialize,
Clone,
Copy,
Debug,
Default,
Deserialize,
Eq,
Ord,
PartialEq,
PartialOrd,
Serialize,
)]
pub struct NodeIndex(pub u32);
impl NodeIndex {
pub const BORSH_SERIALIZED_SIZE: usize = size_of::<u32>();
}
impl fmt::Display for NodeIndex {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(
BorshSerialize,
BorshDeserialize,
Clone,
Copy,
Debug,
Default,
Deserialize,
Eq,
Ord,
PartialEq,
PartialOrd,
Serialize,
)]
pub struct NodeId {
pub epoch: EpochId,
pub committee: CommitteeIndex,
pub index: NodeIndex,
}
impl NodeId {
pub const BORSH_SERIALIZED_SIZE: usize = EpochId::BORSH_SERIALIZED_SIZE
+ CommitteeIndex::BORSH_SERIALIZED_SIZE
+ NodeIndex::BORSH_SERIALIZED_SIZE;
}