p2panda_auth/group/
action.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2
3#[cfg(any(test, feature = "serde"))]
4use serde::{Deserialize, Serialize};
5
6use crate::Access;
7use crate::group::GroupMember;
8
9/// Actions for creating groups and modifying group membership.
10#[derive(Clone, Debug, PartialEq, Eq)]
11#[cfg_attr(any(test, feature = "serde"), derive(Deserialize, Serialize))]
12pub enum GroupAction<ID, C> {
13    Create {
14        initial_members: Vec<(GroupMember<ID>, Access<C>)>,
15    },
16    Add {
17        member: GroupMember<ID>,
18        access: Access<C>,
19    },
20    Remove {
21        member: GroupMember<ID>,
22    },
23    Promote {
24        member: GroupMember<ID>,
25        access: Access<C>,
26    },
27    Demote {
28        member: GroupMember<ID>,
29        access: Access<C>,
30    },
31}
32
33impl<ID, C> GroupAction<ID, C>
34where
35    ID: Copy,
36{
37    /// Return `true` if this is a create action.
38    pub fn is_create(&self) -> bool {
39        matches!(self, GroupAction::Create { .. })
40    }
41}