viewstamped_replication/
configuration.rs

1#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
2pub struct Configuration {
3    replicas: usize,
4    group: Group,
5}
6
7impl From<usize> for Configuration {
8    fn from(value: usize) -> Self {
9        Self::new(value, Default::default())
10    }
11}
12
13impl Configuration {
14    pub fn new(replicas: usize, group: Group) -> Self {
15        Self { replicas, group }
16    }
17
18    pub fn replicas(&self) -> usize {
19        self.replicas
20    }
21
22    pub fn group(&self) -> Group {
23        self.group
24    }
25
26    pub fn sub_majority(&self) -> usize {
27        (self.replicas - 1) / 2
28    }
29
30    pub fn quorum(&self) -> usize {
31        self.sub_majority() + 1
32    }
33}
34
35#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
36pub struct Group(u128);
37
38impl Default for Group {
39    fn default() -> Self {
40        Self(uuid::Uuid::new_v4().as_u128())
41    }
42}