1use 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}