slack_blocks/elems/select/multi/
conversation.rs1use std::borrow::Cow;
9
10use serde::{Deserialize, Serialize};
11#[cfg(feature = "validation")]
12use validator::Validate;
13
14#[cfg(feature = "validation")]
15use crate::val_helpr::ValidationResult;
16use crate::{compose::{Confirm, ConversationFilter},
17 elems::select::conversation::build,
18 text};
19
20#[derive(Clone, Debug, Deserialize, Hash, PartialEq, Serialize)]
27#[cfg_attr(feature = "validation", derive(Validate))]
28pub struct Conversation<'a> {
29 #[cfg_attr(feature = "validation",
30 validate(custom = "crate::elems::select::validate::placeholder"))]
31 pub(in crate::elems::select) placeholder: text::Text,
32
33 #[cfg_attr(feature = "validation", validate(length(max = 255)))]
34 pub(in crate::elems::select) action_id: Cow<'a, str>,
35
36 #[serde(skip_serializing_if = "Option::is_none")]
37 #[cfg_attr(feature = "validation", validate)]
38 pub(in crate::elems::select) confirm: Option<Confirm>,
39
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub(in crate::elems::select) initial_channels: Option<Cow<'a, [String]>>,
42
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub(in crate::elems::select) default_to_current_conversation: Option<bool>,
45
46 #[cfg_attr(feature = "validation", validate)]
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub(in crate::elems::select) filter: Option<ConversationFilter>,
49
50 #[cfg_attr(feature = "validation", validate(range(min = 1)))]
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub(in crate::elems::select) max_selected_items: Option<u32>,
53}
54
55impl<'a> Conversation<'a> {
56 pub fn builder() -> build::MultiConversationBuilderInit<'a> {
63 build::MultiConversationBuilderInit::new()
64 }
65
66 #[cfg(feature = "validation")]
91 #[cfg_attr(docsrs, doc(cfg(feature = "validation")))]
92 pub fn validate(&self) -> ValidationResult {
93 Validate::validate(&self)
94 }
95}