1#[cfg(feature = "network")]
2pub mod net;
3
4use sentc_crypto_light::group::prepare_change_rank;
5use sentc_crypto_light::sdk_common::GroupId;
6use sentc_crypto_light::sdk_utils::group::GroupOutDataLight;
7
8use crate::error::SentcError;
9
10pub struct Group
11{
12 group_id: GroupId,
13 parent_group_id: Option<GroupId>,
14 from_parent: bool,
15 created_time: u128,
16 joined_time: u128,
17 rank: i32,
18 is_connected_group: bool,
19 access_by_parent: Option<GroupId>,
20 access_by_group_as_member: Option<GroupId>,
21
22 base_url: String,
23 app_token: String,
24}
25
26impl Group
27{
28 #[allow(clippy::too_many_arguments)]
29 fn new_group(
30 base_url: String,
31 app_token: String,
32 group_id: GroupId,
33 parent_group_id: Option<GroupId>,
34 from_parent: bool,
35 created_time: u128,
36 joined_time: u128,
37 rank: i32,
38 is_connected_group: bool,
39 access_by_parent: Option<GroupId>,
40 access_by_group_as_member: Option<GroupId>,
41 ) -> Self
42 {
43 Self {
44 base_url,
45 app_token,
46 group_id,
47 parent_group_id,
48 from_parent,
49 created_time,
50 joined_time,
51 rank,
52 is_connected_group,
53 access_by_parent,
54 access_by_group_as_member,
55 }
56 }
57
58 pub fn from_server(base_url: String, app_token: String, server_data: GroupOutDataLight) -> Self
59 {
60 let parent = server_data.access_by_parent_group.is_some();
61
62 Self::new_group(
63 base_url,
64 app_token,
65 server_data.group_id,
66 server_data.parent_group_id,
67 parent,
68 server_data.created_time,
69 server_data.joined_time,
70 server_data.rank,
71 server_data.is_connected_group,
72 server_data.access_by_parent_group,
73 server_data.access_by_group_as_member,
74 )
75 }
76
77 pub fn get_group_id(&self) -> &str
78 {
79 &self.group_id
80 }
81
82 pub fn get_parent_group_id(&self) -> Option<&GroupId>
83 {
84 self.parent_group_id.as_ref()
85 }
86
87 pub fn get_fetched_from_parent_group(&self) -> bool
88 {
89 self.from_parent
90 }
91
92 pub fn get_rank(&self) -> i32
93 {
94 self.rank
95 }
96
97 pub fn get_access_group_as_member(&self) -> Option<&str>
98 {
99 self.access_by_group_as_member.as_deref()
100 }
101
102 pub fn prepare_update_rank(&self, user_id: &str, new_rank: i32) -> Result<String, SentcError>
103 {
104 Ok(prepare_change_rank(user_id, new_rank, self.rank)?)
105 }
106
107 pub fn get_created_time(&self) -> u128
108 {
109 self.created_time
110 }
111
112 pub fn get_joined_time(&self) -> u128
113 {
114 self.joined_time
115 }
116
117 pub fn is_connected_group(&self) -> bool
118 {
119 self.is_connected_group
120 }
121
122 pub fn access_by_parent_group(&self) -> Option<&GroupId>
123 {
124 self.access_by_parent.as_ref()
125 }
126
127 pub fn access_by_group_as_member(&self) -> Option<&GroupId>
128 {
129 self.access_by_group_as_member.as_ref()
130 }
131}