use serde::{Deserialize, Serialize};
use crate::convert;
#[cfg(feature = "validation")]
use crate::val_helpr::ValidationResult;
pub mod button;
pub mod checkboxes;
pub mod date_picker;
pub mod image;
pub mod overflow;
pub mod radio;
pub mod select;
pub mod text_input;
#[doc(inline)]
pub use button::Button;
#[doc(inline)]
pub use checkboxes::Checkboxes;
#[doc(inline)]
pub use date_picker::DatePicker;
#[doc(inline)]
pub use image::Image;
#[doc(inline)]
pub use overflow::Overflow;
#[doc(inline)]
pub use radio::Radio;
#[doc(inline)]
pub use text_input::TextInput;
#[derive(Clone, Debug, Deserialize, Hash, PartialEq, Serialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum BlockElement<'a> {
Button(Button<'a>),
Checkboxes(Checkboxes<'a>),
Image(Image<'a>),
#[serde(rename = "datepicker")]
DatePicker(DatePicker<'a>),
Overflow(Overflow<'a>),
RadioButtons(Radio<'a>),
#[serde(rename = "plain_text_input")]
TextInput(TextInput<'a>),
#[serde(rename = "channels_select")]
SelectPublicChannel(select::PublicChannel<'a>),
#[serde(rename = "conversations_select")]
SelectConversation(select::Conversation<'a>),
#[serde(rename = "users_select")]
SelectUser(select::User<'a>),
#[serde(rename = "external_select")]
SelectExternal(select::External<'a>),
#[serde(rename = "static_select")]
SelectStatic(select::Static<'a>),
#[serde(rename = "multi_static_select")]
MultiSelectStatic(select::multi::Static<'a>),
#[serde(rename = "multi_users_select")]
MultiSelectUser(select::multi::User<'a>),
#[serde(rename = "multi_external_select")]
MultiSelectExternal(select::multi::External<'a>),
#[serde(rename = "multi_conversations_select")]
MultiSelectConversation(select::multi::Conversation<'a>),
#[serde(rename = "multi_channels_select")]
MultiSelectPublicChannel(select::multi::PublicChannel<'a>),
}
impl<'a> BlockElement<'a> {
#[cfg(feature = "validation")]
#[cfg_attr(docsrs, doc(cfg(feature = "validation")))]
pub fn validate(&self) -> ValidationResult {
use BlockElement::*;
match self {
| Button(cts) => cts.validate(),
| SelectPublicChannel(cts) => cts.validate(),
| SelectConversation(cts) => cts.validate(),
| SelectUser(cts) => cts.validate(),
| SelectExternal(cts) => cts.validate(),
| SelectStatic(cts) => cts.validate(),
| MultiSelectPublicChannel(cts) => cts.validate(),
| MultiSelectConversation(cts) => cts.validate(),
| MultiSelectUser(cts) => cts.validate(),
| MultiSelectExternal(cts) => cts.validate(),
| MultiSelectStatic(cts) => cts.validate(),
| RadioButtons(cts) => cts.validate(),
| Overflow(cts) => cts.validate(),
| Checkboxes(cts) => cts.validate(),
| Image(cts) => cts.validate(),
| DatePicker(cts) => cts.validate(),
| TextInput(cts) => cts.validate(),
}
}
}
convert!(impl<'a> From<Button<'a>> for BlockElement<'a> => |b| BlockElement::Button(b));
convert!(impl<'a> From<Radio<'a>> for BlockElement<'a> => |b| BlockElement::RadioButtons(b));
convert!(impl<'a> From<TextInput<'a>> for BlockElement<'a> => |t| BlockElement::TextInput(t));
convert!(impl<'a> From<Overflow<'a>> for BlockElement<'a> => |t| BlockElement::Overflow(t));
convert!(impl<'a> From<DatePicker<'a>> for BlockElement<'a> => |t| BlockElement::DatePicker(t));
convert!(impl<'a> From<Checkboxes<'a>> for BlockElement<'a> => |t| BlockElement::Checkboxes(t));
convert!(impl<'a> From<Image<'a>> for BlockElement<'a> => |t| BlockElement::Image(t));
convert!(impl<'a> From<select::Static<'a>> for BlockElement<'a> => |s| BlockElement::SelectStatic(s));
convert!(impl<'a> From<select::External<'a>> for BlockElement<'a> => |s| BlockElement::SelectExternal(s));
convert!(impl<'a> From<select::PublicChannel<'a>> for BlockElement<'a> => |s| BlockElement::SelectPublicChannel(s));
convert!(impl<'a> From<select::Conversation<'a>> for BlockElement<'a> => |s| BlockElement::SelectConversation(s));
convert!(impl<'a> From<select::User<'a>> for BlockElement<'a> => |s| BlockElement::SelectUser(s));
convert!(impl<'a> From<select::multi::Static<'a>> for BlockElement<'a> => |s| BlockElement::MultiSelectStatic(s));
convert!(impl<'a> From<select::multi::User<'a>> for BlockElement<'a> => |s| BlockElement::MultiSelectUser(s));
convert!(impl<'a> From<select::multi::Conversation<'a>> for BlockElement<'a> => |s| BlockElement::MultiSelectConversation(s));
convert!(impl<'a> From<select::multi::External<'a>> for BlockElement<'a> => |s| BlockElement::MultiSelectExternal(s));
convert!(impl<'a> From<select::multi::PublicChannel<'a>> for BlockElement<'a> => |s| BlockElement::MultiSelectPublicChannel(s));