viewstamped_replication/
configuration.rs1#[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}