//! # Group information //! //! Group visibility level use crate::data::group_id::GroupID; #[allow(non_camel_case_types)] #[derive(Eq, PartialEq, Hash, Debug)] pub enum GroupVisibilityLevel { OPEN_GROUP, PRIVATE_GROUP, SECRETE_GROUP, } #[allow(non_camel_case_types)] #[derive(Eq, PartialEq, Hash, Debug)] pub enum GroupRegistrationLevel { OPEN_REGISTRATION = 0, MODERATED_REGISTRATION = 1, CLOSED_REGISTRATION = 2, } #[allow(non_camel_case_types)] #[derive(Eq, PartialEq, Hash, Debug)] pub enum GroupPostsCreationLevel { //Only the moderators and the administrator can create posts POSTS_LEVEL_MODERATORS = 0, //All the members of the group can create posts POSTS_LEVEL_ALL_MEMBERS = 1, } #[allow(non_camel_case_types)] #[derive(Eq, PartialEq, Hash, Debug, PartialOrd)] pub enum GroupAccessLevel { //Can not even know if the group exists or not NO_ACCESS = 0, //Access to the name of the group only LIMITED_ACCESS = 1, //Can see the posts of the group, but not a member of the group VIEW_ACCESS = 2, //Member access (same as view access but as member) MEMBER_ACCESS = 3, //Can create posts, even if posts creation is restricted MODERATOR_ACCESS = 4, //Can do everything ADMIN_ACCESS = 5, } /// Group information #[derive(Debug)] pub struct Group { pub id: GroupID, pub name: String, pub members_count: u64, pub visibility: GroupVisibilityLevel, pub registration_level: GroupRegistrationLevel, pub posts_creation_level: GroupPostsCreationLevel, pub logo: Option, pub virtual_directory: Option, pub time_create: u64, pub description: Option, pub url: Option, } #[cfg(test)] mod tests { use crate::data::group::GroupAccessLevel; #[test] fn access_level_coherence() { assert!(GroupAccessLevel::NO_ACCESS < GroupAccessLevel::LIMITED_ACCESS); assert!(GroupAccessLevel::LIMITED_ACCESS < GroupAccessLevel::VIEW_ACCESS); assert!(GroupAccessLevel::VIEW_ACCESS < GroupAccessLevel::MEMBER_ACCESS); assert!(GroupAccessLevel::MEMBER_ACCESS < GroupAccessLevel::MODERATOR_ACCESS); assert!(GroupAccessLevel::MODERATOR_ACCESS < GroupAccessLevel::ADMIN_ACCESS); } }