Skip to main content

zulip_api/message/
server_supported_permission_setting.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::{field_access, impl_default, impl_display, GroupPermissionSetting};
6
7/// Represents metadata detailing the valid values for permission settings that use `group-setting values`.
8///
9/// Clients should use these data as explained in the `main documentation` to determine what values to present as possible values for these settings in UI components.
10///
11/// **Changes**: Before Zulip 10.0 (feature level 326),
12/// this part of the response had a documented-as-unstable format not suitable for general client use, and should be ignored.
13///
14/// New in Zulip 8.0 (feature level 221).
15#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
16pub struct ServerSupportedPermissionSetting {
17    #[serde(skip_serializing_if = "Option::is_none")]
18    realm: Option<HashMap<String, GroupPermissionSetting>>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    stream: Option<HashMap<String, GroupPermissionSetting>>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    group: Option<HashMap<String, GroupPermissionSetting>>,
23}
24
25impl ServerSupportedPermissionSetting {
26    /// Creates a new [ServerSupportedPermissionSetting].
27    pub const fn new() -> Self {
28        Self {
29            realm: None,
30            stream: None,
31            group: None,
32        }
33    }
34}
35
36field_access! {
37    ServerSupportedPermissionSetting {
38        /// Configuration for realm level group permission settings.
39        realm: option_ref { HashMap<String, GroupPermissionSetting> },
40        /// Configuration for channel level group permission settings.
41        stream: option_ref { HashMap<String, GroupPermissionSetting> },
42        /// Configuration for group level group permission settings.
43        group: option_ref { HashMap<String, GroupPermissionSetting> },
44    }
45}
46
47impl_default!(ServerSupportedPermissionSetting);
48impl_display!(ServerSupportedPermissionSetting);