func (s ButtonBlockElement) ElementType() MessageElementType {
	return s.Type
}
ElementType returns the type of the element
package slack
const (
	METCheckboxGroups MessageElementType = "checkboxes"
	METImage          MessageElementType = "image"
	METButton         MessageElementType = "button"
	METOverflow       MessageElementType = "overflow"
	METDatepicker     MessageElementType = "datepicker"
	METPlainTextInput MessageElementType = "plain_text_input"
	METRadioButtons   MessageElementType = "radio_buttons"
	MixedElementImage MixedElementType = "mixed_image"
	MixedElementText  MixedElementType = "mixed_text"
	OptTypeStatic        string = "static_select"
	OptTypeExternal      string = "external_select"
	OptTypeUser          string = "users_select"
	OptTypeConversations string = "conversations_select"
	OptTypeChannels      string = "channels_select"
	MultiOptTypeStatic        string = "multi_static_select"
	MultiOptTypeExternal      string = "multi_external_select"
	MultiOptTypeUser          string = "multi_users_select"
	MultiOptTypeConversations string = "multi_conversations_select"
	MultiOptTypeChannels      string = "multi_channels_select"
)
type MessageElementType string
type MixedElementType string
type BlockElement interface {
	ElementType() MessageElementType
}
type MixedElement interface {
	MixedElementType() MixedElementType
}
type Accessory struct {
	ImageElement          *ImageBlockElement
	ButtonElement         *ButtonBlockElement
	OverflowElement       *OverflowBlockElement
	DatePickerElement     *DatePickerBlockElement
	PlainTextInputElement *PlainTextInputBlockElement
	RadioButtonsElement   *RadioButtonsBlockElement
	SelectElement         *SelectBlockElement
	MultiSelectElement    *MultiSelectBlockElement
	UnknownElement        *UnknownBlockElement
}
func NewAccessory(element BlockElement) *Accessory {
	switch element.(type) {
	case *ImageBlockElement:
		return &Accessory{ImageElement: element.(*ImageBlockElement)}
	case *ButtonBlockElement:
		return &Accessory{ButtonElement: element.(*ButtonBlockElement)}
	case *OverflowBlockElement:
		return &Accessory{OverflowElement: element.(*OverflowBlockElement)}
	case *DatePickerBlockElement:
		return &Accessory{DatePickerElement: element.(*DatePickerBlockElement)}
	case *PlainTextInputBlockElement:
		return &Accessory{PlainTextInputElement: element.(*PlainTextInputBlockElement)}
	case *RadioButtonsBlockElement:
		return &Accessory{RadioButtonsElement: element.(*RadioButtonsBlockElement)}
	case *SelectBlockElement:
		return &Accessory{SelectElement: element.(*SelectBlockElement)}
	case *MultiSelectBlockElement:
		return &Accessory{MultiSelectElement: element.(*MultiSelectBlockElement)}
	default:
		return &Accessory{UnknownElement: element.(*UnknownBlockElement)}
	}
}
type BlockElements struct {
	ElementSet []BlockElement `json:"elements,omitempty"`
}
type UnknownBlockElement struct {
	Type     MessageElementType `json:"type"`
	Elements BlockElements
}
func (s UnknownBlockElement) ElementType() MessageElementType {
	return s.Type
}
type ImageBlockElement struct {
	Type     MessageElementType `json:"type"`
	ImageURL string             `json:"image_url"`
	AltText  string             `json:"alt_text"`
}
func (s ImageBlockElement) ElementType() MessageElementType {
	return s.Type
}
func (s ImageBlockElement) MixedElementType() MixedElementType {
	return MixedElementImage
}
func NewImageBlockElement(imageURL, altText string) *ImageBlockElement {
	return &ImageBlockElement{
		Type:     METImage,
		ImageURL: imageURL,
		AltText:  altText,
	}
}
type Style string
const (
	StyleDefault Style = "default"
	StylePrimary Style = "primary"
	StyleDanger  Style = "danger"
)
type ButtonBlockElement struct {
	Type     MessageElementType       `json:"type,omitempty"`
	Text     *TextBlockObject         `json:"text"`
	ActionID string                   `json:"action_id,omitempty"`
	URL      string                   `json:"url,omitempty"`
	Value    string                   `json:"value,omitempty"`
	Confirm  *ConfirmationBlockObject `json:"confirm,omitempty"`
	Style    Style                    `json:"style,omitempty"`
}