From 55f4934ba775ee5c88d8205081ecd1896d779c72 Mon Sep 17 00:00:00 2001 From: Carson Hoffman Date: Thu, 2 Dec 2021 15:07:38 -0500 Subject: [PATCH] Add MessageComponentFromJSON --- components.go | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/components.go b/components.go index 124e95e..2ad19a0 100644 --- a/components.go +++ b/components.go @@ -2,6 +2,7 @@ package discordgo import ( "encoding/json" + "fmt" ) // ComponentType is type of component. @@ -34,22 +35,26 @@ func (umc *unmarshalableMessageComponent) UnmarshalJSON(src []byte) error { return err } - var data MessageComponent switch v.Type { case ActionsRowComponent: - v := ActionsRow{} - err = json.Unmarshal(src, &v) - data = v + umc.MessageComponent = &ActionsRow{} case ButtonComponent: - v := Button{} - err = json.Unmarshal(src, &v) - data = v + umc.MessageComponent = &Button{} + case SelectMenuComponent: + umc.MessageComponent = &SelectMenu{} + default: + return fmt.Errorf("unknown component type: %d", v.Type) } + return json.Unmarshal(src, umc.MessageComponent) +} + +func MessageComponentFromJSON(b []byte) (MessageComponent, error) { + var u unmarshalableMessageComponent + err := u.UnmarshalJSON(b) if err != nil { - return err + return nil, fmt.Errorf("failed to unmarshal into MessageComponent: %w", err) } - umc.MessageComponent = data - return err + return u.MessageComponent, nil } // ActionsRow is a container for components within one row.