summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/nlopes/slack/block_object.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/nlopes/slack/block_object.go')
-rw-r--r--vendor/github.com/nlopes/slack/block_object.go216
1 files changed, 0 insertions, 216 deletions
diff --git a/vendor/github.com/nlopes/slack/block_object.go b/vendor/github.com/nlopes/slack/block_object.go
deleted file mode 100644
index 824ec93c..00000000
--- a/vendor/github.com/nlopes/slack/block_object.go
+++ /dev/null
@@ -1,216 +0,0 @@
-package slack
-
-import (
- "encoding/json"
-)
-
-// Block Objects are also known as Composition Objects
-//
-// For more information: https://api.slack.com/reference/messaging/composition-objects
-
-// BlockObject defines an interface that all block object types should
-// implement.
-// @TODO: Is this interface needed?
-
-// blockObject object types
-const (
- MarkdownType = "mrkdwn"
- PlainTextType = "plain_text"
- // The following objects don't actually have types and their corresponding
- // const values are just for internal use
- motConfirmation = "confirm"
- motOption = "option"
- motOptionGroup = "option_group"
-)
-
-type MessageObjectType string
-
-type blockObject interface {
- validateType() MessageObjectType
-}
-
-type BlockObjects struct {
- TextObjects []*TextBlockObject
- ConfirmationObjects []*ConfirmationBlockObject
- OptionObjects []*OptionBlockObject
- OptionGroupObjects []*OptionGroupBlockObject
-}
-
-// UnmarshalJSON implements the Unmarshaller interface for BlockObjects, so that any JSON
-// unmarshalling is delegated and proper type determination can be made before unmarshal
-func (b *BlockObjects) UnmarshalJSON(data []byte) error {
- var raw []json.RawMessage
- err := json.Unmarshal(data, &raw)
- if err != nil {
- return err
- }
-
- for _, r := range raw {
- var obj map[string]interface{}
- err := json.Unmarshal(r, &obj)
- if err != nil {
- return err
- }
-
- blockObjectType := getBlockObjectType(obj)
-
- switch blockObjectType {
- case PlainTextType, MarkdownType:
- object, err := unmarshalBlockObject(r, &TextBlockObject{})
- if err != nil {
- return err
- }
- b.TextObjects = append(b.TextObjects, object.(*TextBlockObject))
- case motConfirmation:
- object, err := unmarshalBlockObject(r, &ConfirmationBlockObject{})
- if err != nil {
- return err
- }
- b.ConfirmationObjects = append(b.ConfirmationObjects, object.(*ConfirmationBlockObject))
- case motOption:
- object, err := unmarshalBlockObject(r, &OptionBlockObject{})
- if err != nil {
- return err
- }
- b.OptionObjects = append(b.OptionObjects, object.(*OptionBlockObject))
- case motOptionGroup:
- object, err := unmarshalBlockObject(r, &OptionGroupBlockObject{})
- if err != nil {
- return err
- }
- b.OptionGroupObjects = append(b.OptionGroupObjects, object.(*OptionGroupBlockObject))
-
- }
- }
-
- return nil
-}
-
-// Ideally would have a better way to identify the block objects for
-// type casting at time of unmarshalling, should be adapted if possible
-// to accomplish in a more reliable manner.
-func getBlockObjectType(obj map[string]interface{}) string {
- if t, ok := obj["type"].(string); ok {
- return t
- }
- if _, ok := obj["confirm"].(string); ok {
- return "confirm"
- }
- if _, ok := obj["options"].(string); ok {
- return "option_group"
- }
- if _, ok := obj["text"].(string); ok {
- if _, ok := obj["value"].(string); ok {
- return "option"
- }
- }
- return ""
-}
-
-func unmarshalBlockObject(r json.RawMessage, object blockObject) (blockObject, error) {
- err := json.Unmarshal(r, object)
- if err != nil {
- return nil, err
- }
- return object, nil
-}
-
-// TextBlockObject defines a text element object to be used with blocks
-//
-// More Information: https://api.slack.com/reference/messaging/composition-objects#text
-type TextBlockObject struct {
- Type string `json:"type"`
- Text string `json:"text"`
- Emoji bool `json:"emoji,omitempty"`
- Verbatim bool `json:"verbatim,omitempty"`
-}
-
-// validateType enforces block objects for element and block parameters
-func (s TextBlockObject) validateType() MessageObjectType {
- return MessageObjectType(s.Type)
-}
-
-// validateType enforces block objects for element and block parameters
-func (s TextBlockObject) MixedElementType() MixedElementType {
- return MixedElementText
-}
-
-// NewTextBlockObject returns an instance of a new Text Block Object
-func NewTextBlockObject(elementType, text string, emoji, verbatim bool) *TextBlockObject {
- return &TextBlockObject{
- Type: elementType,
- Text: text,
- Emoji: emoji,
- Verbatim: verbatim,
- }
-}
-
-// ConfirmationBlockObject defines a dialog that provides a confirmation step to
-// any interactive element. This dialog will ask the user to confirm their action by
-// offering a confirm and deny buttons.
-//
-// More Information: https://api.slack.com/reference/messaging/composition-objects#confirm
-type ConfirmationBlockObject struct {
- Title *TextBlockObject `json:"title"`
- Text *TextBlockObject `json:"text"`
- Confirm *TextBlockObject `json:"confirm"`
- Deny *TextBlockObject `json:"deny"`
-}
-
-// validateType enforces block objects for element and block parameters
-func (s ConfirmationBlockObject) validateType() MessageObjectType {
- return motConfirmation
-}
-
-// NewConfirmationBlockObject returns an instance of a new Confirmation Block Object
-func NewConfirmationBlockObject(title, text, confirm, deny *TextBlockObject) *ConfirmationBlockObject {
- return &ConfirmationBlockObject{
- Title: title,
- Text: text,
- Confirm: confirm,
- Deny: deny,
- }
-}
-
-// OptionBlockObject represents a single selectable item in a select menu
-//
-// More Information: https://api.slack.com/reference/messaging/composition-objects#option
-type OptionBlockObject struct {
- Text *TextBlockObject `json:"text"`
- Value string `json:"value"`
- URL string `json:"url,omitempty"`
-}
-
-// NewOptionBlockObject returns an instance of a new Option Block Element
-func NewOptionBlockObject(value string, text *TextBlockObject) *OptionBlockObject {
- return &OptionBlockObject{
- Text: text,
- Value: value,
- }
-}
-
-// validateType enforces block objects for element and block parameters
-func (s OptionBlockObject) validateType() MessageObjectType {
- return motOption
-}
-
-// OptionGroupBlockObject Provides a way to group options in a select menu.
-//
-// More Information: https://api.slack.com/reference/messaging/composition-objects#option-group
-type OptionGroupBlockObject struct {
- Label *TextBlockObject `json:"label,omitempty"`
- Options []*OptionBlockObject `json:"options"`
-}
-
-// validateType enforces block objects for element and block parameters
-func (s OptionGroupBlockObject) validateType() MessageObjectType {
- return motOptionGroup
-}
-
-// NewOptionGroupBlockElement returns an instance of a new option group block element
-func NewOptionGroupBlockElement(label *TextBlockObject, options ...*OptionBlockObject) *OptionGroupBlockObject {
- return &OptionGroupBlockObject{
- Label: label,
- Options: options,
- }
-}