zulip_api/message/user_settings.rs
1use serde::{Deserialize, Serialize};
2
3use crate::{
4 field_access, impl_default, impl_display, AutomaticallyFollowTopicsPolicy,
5 AutomaticallyUnmuteTopicsInMutedStreamsPolicy, ColorScheme, DemoteInactiveStreams,
6 DesktopIconCountDisplay, EmailAddressVisibility, Emojiset, RealmNameInEmailNotificationsPolicy,
7 ResolvedTopicNoticeAutoReadPolicy, UserListStyle, WebAnimateImagePreviews,
8 WebChannelDefaultView, WebHomeView, WebMarkReadOnScrollPolicy,
9 WebStreamUnreadsCountDisplayPolicy,
10};
11
12mod emojiset_choice;
13
14pub use emojiset_choice::UserSettingsEmojisetChoice;
15
16/// Represents the user's personal settings.
17///
18/// **Changes**: Removed `dense_mode` setting in Zulip 10.0 (feature level 364) as we now have `web_font_size_px` and `web_line_height_percent` settings for more control. New in Zulip 5.0 (feature level 89). Previously, these settings appeared in the top-level object, where they are available for clients without the `user_settings_object` client capability for backwards-compatibility.
19///
20/// Modified from `openapi-generator-cli` output:
21///
22/// ```shell,no_build,no_run
23/// $ openapi-generator-cli generate -g rust -i ./zerver/openapi/zulip.yaml -o zulip-openapi --skip-validate-spec
24/// ```
25///
26/// ```text
27/// /*
28/// * Zulip REST API
29/// *
30/// * Powerful open source group chat
31/// *
32/// * The version of the OpenAPI document: 1.0.0
33/// *
34/// * Generated by: https://openapi-generator.tech
35/// */
36/// ```
37///
38/// See [zerver/openapi/zulip.yaml](https://github.com/zulip/zulip/blob/main/zerver/openapi/zulip.yaml) for the original OpenAPI configuration.
39///
40/// Configuration slightly modified to work with the Rust generator of [`openapi-generator-cli`](https://openapi-generator.tech).
41#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
42pub struct UserSettings {
43 #[serde(skip_serializing_if = "Option::is_none")]
44 twenty_four_hour_time: Option<bool>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 web_mark_read_on_scroll_policy: Option<WebMarkReadOnScrollPolicy>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 web_channel_default_view: Option<WebChannelDefaultView>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 starred_message_counts: Option<bool>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 receives_typing_notifications: Option<bool>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 web_suggest_update_timezone: Option<bool>,
55 #[serde(skip_serializing_if = "Option::is_none")]
56 fluid_layout_width: Option<bool>,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 high_contrast_mode: Option<bool>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 web_font_size_px: Option<i32>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 web_line_height_percent: Option<i32>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 color_scheme: Option<ColorScheme>,
65 #[serde(skip_serializing_if = "Option::is_none")]
66 translate_emoticons: Option<bool>,
67 #[serde(skip_serializing_if = "Option::is_none")]
68 display_emoji_reaction_users: Option<bool>,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 default_language: Option<String>,
71 #[serde(skip_serializing_if = "Option::is_none")]
72 web_home_view: Option<WebHomeView>,
73 #[serde(skip_serializing_if = "Option::is_none")]
74 web_escape_navigates_to_home_view: Option<bool>,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 left_side_userlist: Option<bool>,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 emojiset: Option<Emojiset>,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 demote_inactive_streams: Option<DemoteInactiveStreams>,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 user_list_style: Option<UserListStyle>,
83 #[serde(skip_serializing_if = "Option::is_none")]
84 web_animate_image_previews: Option<WebAnimateImagePreviews>,
85 #[serde(skip_serializing_if = "Option::is_none")]
86 web_stream_unreads_count_display_policy: Option<WebStreamUnreadsCountDisplayPolicy>,
87 #[serde(skip_serializing_if = "Option::is_none")]
88 hide_ai_features: Option<bool>,
89 #[serde(skip_serializing_if = "Option::is_none")]
90 web_left_sidebar_show_channel_folders: Option<bool>,
91 #[serde(skip_serializing_if = "Option::is_none")]
92 web_left_sidebar_unreads_count_summary: Option<bool>,
93 #[serde(skip_serializing_if = "Option::is_none")]
94 timezone: Option<String>,
95 #[serde(skip_serializing_if = "Option::is_none")]
96 enter_sends: Option<bool>,
97 #[serde(skip_serializing_if = "Option::is_none")]
98 enable_drafts_synchronization: Option<bool>,
99 #[serde(skip_serializing_if = "Option::is_none")]
100 enable_stream_desktop_notifications: Option<bool>,
101 #[serde(skip_serializing_if = "Option::is_none")]
102 enable_stream_email_notifications: Option<bool>,
103 #[serde(skip_serializing_if = "Option::is_none")]
104 enable_stream_push_notifications: Option<bool>,
105 #[serde(skip_serializing_if = "Option::is_none")]
106 enable_stream_audible_notifications: Option<bool>,
107 #[serde(skip_serializing_if = "Option::is_none")]
108 notification_sound: Option<String>,
109 #[serde(skip_serializing_if = "Option::is_none")]
110 enable_desktop_notifications: Option<bool>,
111 #[serde(skip_serializing_if = "Option::is_none")]
112 enable_sounds: Option<bool>,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 enable_followed_topic_desktop_notifications: Option<bool>,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 enable_followed_topic_email_notifications: Option<bool>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 enable_followed_topic_push_notifications: Option<bool>,
119 #[serde(skip_serializing_if = "Option::is_none")]
120 enable_followed_topic_audible_notifications: Option<bool>,
121 #[serde(skip_serializing_if = "Option::is_none")]
122 email_notifications_batching_period_seconds: Option<i32>,
123 #[serde(skip_serializing_if = "Option::is_none")]
124 enable_offline_email_notifications: Option<bool>,
125 #[serde(skip_serializing_if = "Option::is_none")]
126 enable_offline_push_notifications: Option<bool>,
127 #[serde(skip_serializing_if = "Option::is_none")]
128 enable_online_push_notifications: Option<bool>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 enable_digest_emails: Option<bool>,
131 #[serde(skip_serializing_if = "Option::is_none")]
132 enable_marketing_emails: Option<bool>,
133 #[serde(skip_serializing_if = "Option::is_none")]
134 enable_login_emails: Option<bool>,
135 #[serde(skip_serializing_if = "Option::is_none")]
136 message_content_in_email_notifications: Option<bool>,
137 #[serde(skip_serializing_if = "Option::is_none")]
138 pm_content_in_desktop_notifications: Option<bool>,
139 #[serde(skip_serializing_if = "Option::is_none")]
140 wildcard_mentions_notify: Option<bool>,
141 #[serde(skip_serializing_if = "Option::is_none")]
142 enable_followed_topic_wildcard_mentions_notify: Option<bool>,
143 #[serde(skip_serializing_if = "Option::is_none")]
144 desktop_icon_count_display: Option<DesktopIconCountDisplay>,
145 #[serde(skip_serializing_if = "Option::is_none")]
146 realm_name_in_email_notifications_policy: Option<RealmNameInEmailNotificationsPolicy>,
147 #[serde(skip_serializing_if = "Option::is_none")]
148 automatically_follow_topics_policy: Option<AutomaticallyFollowTopicsPolicy>,
149 #[serde(skip_serializing_if = "Option::is_none")]
150 automatically_unmute_topics_in_muted_streams_policy:
151 Option<AutomaticallyUnmuteTopicsInMutedStreamsPolicy>,
152 #[serde(skip_serializing_if = "Option::is_none")]
153 automatically_follow_topics_where_mentioned: Option<bool>,
154 #[serde(skip_serializing_if = "Option::is_none")]
155 resolved_topic_notice_auto_read_policy: Option<ResolvedTopicNoticeAutoReadPolicy>,
156 #[serde(skip_serializing_if = "Option::is_none")]
157 presence_enabled: Option<bool>,
158 #[serde(skip_serializing_if = "Option::is_none")]
159 available_notification_sounds: Option<Vec<String>>,
160 #[serde(skip_serializing_if = "Option::is_none")]
161 emojiset_choices: Option<Vec<UserSettingsEmojisetChoice>>,
162 #[serde(skip_serializing_if = "Option::is_none")]
163 send_private_typing_notifications: Option<bool>,
164 #[serde(skip_serializing_if = "Option::is_none")]
165 send_stream_typing_notifications: Option<bool>,
166 #[serde(skip_serializing_if = "Option::is_none")]
167 send_read_receipts: Option<bool>,
168 #[serde(skip_serializing_if = "Option::is_none")]
169 allow_private_data_export: Option<bool>,
170 #[serde(skip_serializing_if = "Option::is_none")]
171 email_address_visibility: Option<EmailAddressVisibility>,
172 #[serde(skip_serializing_if = "Option::is_none")]
173 web_navigate_to_sent_message: Option<bool>,
174}
175
176impl UserSettings {
177 /// Creates a new [UserSettings].
178 pub const fn new() -> Self {
179 Self {
180 twenty_four_hour_time: None,
181 web_mark_read_on_scroll_policy: None,
182 web_channel_default_view: None,
183 starred_message_counts: None,
184 receives_typing_notifications: None,
185 web_suggest_update_timezone: None,
186 fluid_layout_width: None,
187 high_contrast_mode: None,
188 web_font_size_px: None,
189 web_line_height_percent: None,
190 color_scheme: None,
191 translate_emoticons: None,
192 display_emoji_reaction_users: None,
193 default_language: None,
194 web_home_view: None,
195 web_escape_navigates_to_home_view: None,
196 left_side_userlist: None,
197 emojiset: None,
198 demote_inactive_streams: None,
199 user_list_style: None,
200 web_animate_image_previews: None,
201 web_stream_unreads_count_display_policy: None,
202 hide_ai_features: None,
203 web_left_sidebar_show_channel_folders: None,
204 web_left_sidebar_unreads_count_summary: None,
205 timezone: None,
206 enter_sends: None,
207 enable_drafts_synchronization: None,
208 enable_stream_desktop_notifications: None,
209 enable_stream_email_notifications: None,
210 enable_stream_push_notifications: None,
211 enable_stream_audible_notifications: None,
212 notification_sound: None,
213 enable_desktop_notifications: None,
214 enable_sounds: None,
215 enable_followed_topic_desktop_notifications: None,
216 enable_followed_topic_email_notifications: None,
217 enable_followed_topic_push_notifications: None,
218 enable_followed_topic_audible_notifications: None,
219 email_notifications_batching_period_seconds: None,
220 enable_offline_email_notifications: None,
221 enable_offline_push_notifications: None,
222 enable_online_push_notifications: None,
223 enable_digest_emails: None,
224 enable_marketing_emails: None,
225 enable_login_emails: None,
226 message_content_in_email_notifications: None,
227 pm_content_in_desktop_notifications: None,
228 wildcard_mentions_notify: None,
229 enable_followed_topic_wildcard_mentions_notify: None,
230 desktop_icon_count_display: None,
231 realm_name_in_email_notifications_policy: None,
232 automatically_follow_topics_policy: None,
233 automatically_unmute_topics_in_muted_streams_policy: None,
234 automatically_follow_topics_where_mentioned: None,
235 resolved_topic_notice_auto_read_policy: None,
236 presence_enabled: None,
237 available_notification_sounds: None,
238 emojiset_choices: None,
239 send_private_typing_notifications: None,
240 send_stream_typing_notifications: None,
241 send_read_receipts: None,
242 allow_private_data_export: None,
243 email_address_visibility: None,
244 web_navigate_to_sent_message: None,
245 }
246 }
247}
248
249field_access! {
250 UserSettings {
251 /// Whether time should be [displayed in 24-hour notation](https://zulip.com/help/change-the-time-format).
252 ///
253 /// A `null` value indicates that the client should use the default time format for the user's locale.
254 ///
255 /// **Changes**: Prior to Zulip 11.0 (feature level 408),
256 /// `null` was not a valid value for this setting.
257 /// Note that it was not possible to actually set the time format to `null` at this feature level.
258 twenty_four_hour_time: option { bool },
259 /// Whether or not to mark messages as read when the user scrolls through their feed.
260 web_mark_read_on_scroll_policy: option { WebMarkReadOnScrollPolicy },
261 /// Web/desktop app setting controlling the default navigation behavior when clicking on a channel link.
262 web_channel_default_view: option { WebChannelDefaultView },
263 /// Whether clients should display the [number of starred messages](https://zulip.com/help/star-a-message#display-the-number-of-starred-messages).
264 starred_message_counts: option { bool },
265 /// Whether the user is configured to receive typing notifications from other users.
266 ///
267 /// The server will only deliver typing notifications events to users who for whom this is enabled.
268 ///
269 /// **Changes**: New in Zulip 9.0 (feature level 253). Previously, there were only options to disable sending typing notifications.
270 receives_typing_notifications: option { bool },
271 /// Whether the user should be shown an alert,
272 /// offering to update their [profile time zone](https://zulip.com/help/change-your-timezone),
273 /// when the time displayed for the profile time zone differs from the current time displayed by the time zone configured on their device.
274 ///
275 /// **Changes**: New in Zulip 10.0 (feature level 329).
276 web_suggest_update_timezone: option { bool },
277 /// Whether to use the [maximum available screen width](https://zulip.com/help/enable-full-width-display) for the web app's center panel (message feed, recent conversations) on wide screens.
278 fluid_layout_width: option { bool },
279 /// This setting is reserved for use to control variations in Zulip's design to help visually impaired users.
280 high_contrast_mode: option { bool },
281 /// User-configured primary `font-size` for the web application, in pixels.
282 ///
283 /// **Changes**: New in Zulip 9.0 (feature level 245). Previously, font size was only adjustable via browser zoom. Note that this setting was not fully implemented at this feature level.
284 web_font_size_px: option { i32 },
285 /// User-configured primary `line-height` for the web application, in percent, so a value of 120 represents a `line-height` of 1.2.
286 ///
287 /// **Changes**: New in Zulip 9.0 (feature level 245).
288 /// Previously, line height was not user-configurable.
289 /// Note that this setting was not fully implemented at this feature level.
290 web_line_height_percent: option { i32 },
291 /// Controls which [color theme](/help/dark-theme) to use.
292 color_scheme: option { ColorScheme },
293 /// Whether to [translate emoticons to emoji](/help/configure-emoticon-translations) in messages the user sends.
294 translate_emoticons: option { bool },
295 /// Whether to display the names of reacting users on a message.
296 ///
297 /// When enabled, clients should display the names of reacting users, rather than a count, for messages with few total reactions.
298 /// The ideal cutoff may depend on the space available for displaying reactions;
299 /// the official web application displays names when 3 or fewer total reactions are present with this setting enabled.
300 ///
301 /// **Changes**: New in Zulip 6.0 (feature level 125).
302 display_emoji_reaction_users: option { bool },
303 /// The [home view](https://zulip.com/help/configure-home-view) used when opening a new Zulip web app window or hitting the `Esc` keyboard shortcut repeatedly.
304 web_home_view: option { WebHomeView },
305 /// Whether the escape key navigates to the [configured home view](https://zulip.com/help/configure-home-view).
306 ///
307 /// **Changes**: New in Zulip 8.0 (feature level 219). Previously, this was called `escape_navigates_to_default_view`, which was new in Zulip 5.0 (feature level 107).
308 web_escape_navigates_to_home_view: option { bool },
309 /// Whether the users list on left sidebar in narrow windows.
310 ///
311 /// This feature is not heavily used and is likely to be reworked.
312 left_side_userlist: option { bool },
313 /// The user's configured [emoji set](https://zulip.com/help/emoji-and-emoticons#use-emoticons), used to display emoji to the user everywhere they appear in the UI.
314 emojiset: option { Emojiset },
315 /// Whether to [hide inactive channels](https://zulip.com/help/manage-inactive-channels) in the left sidebar.
316 demote_inactive_streams: option { DemoteInactiveStreams },
317 /// The style selected by the user for the right sidebar user list.
318 user_list_style: option { UserListStyle },
319 /// Controls how animated images should be played in the message feed in the web/desktop application.
320 web_animate_image_previews: option { WebAnimateImagePreviews },
321 /// Configuration for which channels should be displayed with a numeric unread count in the left sidebar.
322 web_stream_unreads_count_display_policy: option { WebStreamUnreadsCountDisplayPolicy },
323 /// Controls whether user wants AI features like topic summarization to be hidden in all Zulip clients.
324 ///
325 /// **Changes**: New in Zulip 10.0 (feature level 350).
326 hide_ai_features: option { bool },
327 /// Determines whether the web/desktop application's left sidebar displays any channel folders configured by the organization.
328 ///
329 /// **Changes**: New in Zulip 11.0 (feature level 411).
330 web_left_sidebar_show_channel_folders: option { bool },
331 /// Determines whether the web/desktop application's left sidebar displays the unread message count summary.
332 ///
333 /// **Changes**: New in Zulip 11.0 (feature level 398).
334 web_left_sidebar_unreads_count_summary: option { bool },
335 /// Whether the user setting for [sending on pressing Enter](https://zulip.com/help/configure-send-message-keys) in the compose box is enabled.
336 enter_sends: option { bool },
337 /// A boolean parameter to control whether synchronizing drafts is enabled for the user.
338 ///
339 /// When synchronization is disabled, all drafts stored in the server will be automatically deleted from the server.
340 ///
341 /// This does not do anything (like sending events) to delete local copies of drafts stored in clients.
342 enable_drafts_synchronization: option { bool },
343 /// Enable visual desktop notifications for channel messages.
344 enable_stream_desktop_notifications: option { bool },
345 /// Enable email notifications for channel messages.
346 enable_stream_email_notifications: option { bool },
347 /// Enable mobile notifications for channel messages.
348 enable_stream_push_notifications: option { bool },
349 /// Enable audible desktop notifications for channel messages.
350 enable_stream_audible_notifications: option { bool },
351 /// Enable visual desktop notifications for direct messages and @-mentions.
352 enable_desktop_notifications: option { bool },
353 /// Enable audible desktop notifications for direct messages and @-mentions.
354 enable_sounds: option { bool },
355 /// Enable visual desktop notifications for messages sent to followed topics. **Changes**: New in Zulip 8.0 (feature level 189).
356 enable_followed_topic_desktop_notifications: option { bool },
357 /// Enable email notifications for messages sent to followed topics. **Changes**: New in Zulip 8.0 (feature level 189).
358 enable_followed_topic_email_notifications: option { bool },
359 /// Enable push notifications for messages sent to followed topics. **Changes**: New in Zulip 8.0 (feature level 189).
360 enable_followed_topic_push_notifications: option { bool },
361 /// Enable audible desktop notifications for messages sent to followed topics. **Changes**: New in Zulip 8.0 (feature level 189).
362 enable_followed_topic_audible_notifications: option { bool },
363 /// The duration (in seconds) for which the server should wait to batch email notifications before sending them.
364 email_notifications_batching_period_seconds: option { i32 },
365 /// Enable email notifications for direct messages and @-mentions received when the user is offline.
366 enable_offline_email_notifications: option { bool },
367 /// Enable mobile notification for direct messages and @-mentions received when the user is offline.
368 enable_offline_push_notifications: option { bool },
369 /// Enable mobile notification for direct messages and @-mentions received when the user is online.
370 enable_online_push_notifications: option { bool },
371 /// Enable digest emails when the user is away.
372 enable_digest_emails: option { bool },
373 /// Enable marketing emails. Has no function outside Zulip Cloud.
374 enable_marketing_emails: option { bool },
375 /// Enable email notifications for new logins to account.
376 enable_login_emails: option { bool },
377 /// Include the message's content in email notifications for new messages.
378 message_content_in_email_notifications: option { bool },
379 /// Include content of direct messages in desktop notifications.
380 pm_content_in_desktop_notifications: option { bool },
381 /// Whether wildcard mentions (E.g. @**all**) should send notifications like a personal mention.
382 wildcard_mentions_notify: option { bool },
383 /// Whether wildcard mentions (e.g., @**all**) in messages sent to followed topics should send notifications like a personal mention.
384 ///
385 /// **Changes**: New in Zulip 8.0 (feature level 189).
386 enable_followed_topic_wildcard_mentions_notify: option { bool },
387 /// Unread count badge (appears in desktop sidebar and browser tab)
388 desktop_icon_count_display: option { DesktopIconCountDisplay },
389 /// Whether to [include organization name in subject of message notification emails](https://zulip.com/help/email-notifications#include-organization-name-in-subject-line).
390 realm_name_in_email_notifications_policy: option { RealmNameInEmailNotificationsPolicy },
391 /// Which [topics to follow automatically](https://zulip.com/help/mute-a-topic).
392 automatically_follow_topics_policy: option { AutomaticallyFollowTopicsPolicy },
393 /// Which [topics to unmute automatically in muted channels](https://zulip.com/help/mute-a-topic).
394 automatically_unmute_topics_in_muted_streams_policy: option { AutomaticallyUnmuteTopicsInMutedStreamsPolicy },
395 /// Whether the server will automatically mark the user as following topics where the user is mentioned.
396 ///
397 /// **Changes**: New in Zulip 8.0 (feature level 235).
398 automatically_follow_topics_where_mentioned: option { bool },
399 /// Controls whether the resolved-topic notices are marked as read.
400 resolved_topic_notice_auto_read_policy: option { ResolvedTopicNoticeAutoReadPolicy },
401 /// Display the presence status to other users when online.
402 presence_enabled: option { bool },
403 /// Whether the user has chosen to send [typing notifications](https://zulip.com/help/typing-notifications) when composing direct messages.
404 ///
405 /// The client should send typing notifications for direct messages if and only if this setting is enabled.
406 ///
407 /// **Changes**: New in Zulip 5.0 (feature level 105).
408 send_private_typing_notifications: option { bool },
409 /// Whether the user has chosen to send [typing notifications](https://zulip.com/help/typing-notifications) when composing channel messages.
410 ///
411 /// The client should send typing notifications for channel messages if and only if this setting is enabled.
412 ///
413 /// **Changes**: New in Zulip 5.0 (feature level 105).
414 send_stream_typing_notifications: option { bool },
415 /// Whether other users are allowed to see whether you've read messages.
416 ///
417 /// **Changes**: New in Zulip 5.0 (feature level 105).
418 send_read_receipts: option { bool },
419 /// Whether organization administrators are allowed to export your private data.
420 ///
421 /// **Changes**: New in Zulip 10.0 (feature level 293).
422 allow_private_data_export: option { bool },
423 /// The [policy](https://zulip.com/api/roles-and-permissions#permission-levels) for
424 /// [which other users](https://zulip.com/help/configure-email-visibility) in this organization can see the user's real email address.
425 email_address_visibility: option { EmailAddressVisibility },
426 /// Web/desktop app setting for whether the user's view should automatically go to the conversation where they sent a message.
427 ///
428 /// **Changes**: New in Zulip 9.0 (feature level 268). Previously, this behavior was not configurable.
429 web_navigate_to_sent_message: option { bool },
430 }
431}
432
433field_access! {
434 UserSettings {
435 /// What [default language](https://zulip.com/help/change-your-language) to use for the account.
436 ///
437 /// This controls both the Zulip UI as well as email notifications sent to the user.
438 ///
439 /// The value needs to be a standard language code that the Zulip server has translation data for; for example, `\"en\"` for English or `\"de\"` for German.
440 default_language: option_cow_deref { str, String },
441 /// Notification sound name.
442 notification_sound: option_cow_deref { str, String },
443 /// The IANA identifier of the user's [profile time zone](https://zulip.com/help/change-your-timezone), which is used primarily to display the user's local time to other users.
444 timezone: option_cow_deref { str, String },
445 /// Array containing the names of the notification sound options supported by this Zulip server.
446 ///
447 /// Only relevant to support UI for configuring notification sounds.
448 available_notification_sounds: option_cow_deref { [String], Vec<String> },
449 /// Array of dictionaries where each dictionary describes an emoji set supported by this version of the Zulip server.
450 ///
451 /// Only relevant to clients with configuration UI for choosing an emoji set; the currently selected emoji set is available in the `emojiset` key.
452 ///
453 /// See [PATCH /settings](https://zulip.com/api/update-settings) for details on the meaning of this setting.
454 emojiset_choices: option_cow_deref { [UserSettingsEmojisetChoice], Vec<UserSettingsEmojisetChoice> },
455 }
456}
457
458impl_default!(UserSettings);
459impl_display!(UserSettings);