Skip to main content

atomr_cluster/
member.rs

1//! Cluster membership types. akka.net: `Cluster/Member.cs`.
2
3use atomr_core::actor::Address;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub enum MemberStatus {
8    Joining,
9    WeaklyUp,
10    Up,
11    Leaving,
12    Exiting,
13    Down,
14    Removed,
15}
16
17#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
18pub struct Member {
19    pub address: Address,
20    pub up_number: i32,
21    pub status: MemberStatus,
22    pub roles: Vec<String>,
23}
24
25impl Member {
26    pub fn new(address: Address, roles: Vec<String>) -> Self {
27        Self { address, up_number: 0, status: MemberStatus::Joining, roles }
28    }
29
30    pub fn copy_with_status(&self, status: MemberStatus) -> Self {
31        Self { status, ..self.clone() }
32    }
33}