func (s UnknownBlockElement) 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
}