zulip-api 0.0.8

Client library for interacting with the Zulip API
Documentation
use std::collections::HashMap;

use serde::{Deserialize, Serialize};

use crate::{field_access, impl_default, impl_display, GroupPermissionSetting};

/// Represents metadata detailing the valid values for permission settings that use `group-setting values`.
///
/// 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.
///
/// **Changes**: Before Zulip 10.0 (feature level 326),
/// this part of the response had a documented-as-unstable format not suitable for general client use, and should be ignored.
///
/// New in Zulip 8.0 (feature level 221).
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ServerSupportedPermissionSetting {
    #[serde(skip_serializing_if = "Option::is_none")]
    realm: Option<HashMap<String, GroupPermissionSetting>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    stream: Option<HashMap<String, GroupPermissionSetting>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    group: Option<HashMap<String, GroupPermissionSetting>>,
}

impl ServerSupportedPermissionSetting {
    /// Creates a new [ServerSupportedPermissionSetting].
    pub const fn new() -> Self {
        Self {
            realm: None,
            stream: None,
            group: None,
        }
    }
}

field_access! {
    ServerSupportedPermissionSetting {
        /// Configuration for realm level group permission settings.
        realm: option_ref { HashMap<String, GroupPermissionSetting> },
        /// Configuration for channel level group permission settings.
        stream: option_ref { HashMap<String, GroupPermissionSetting> },
        /// Configuration for group level group permission settings.
        group: option_ref { HashMap<String, GroupPermissionSetting> },
    }
}

impl_default!(ServerSupportedPermissionSetting);
impl_display!(ServerSupportedPermissionSetting);