//////////////////////////////////////////////////////////////////////////////// // Copyright © 2022 xx foundation // // // // Use of this source code is governed by a license that can be found in the // // LICENSE file // //////////////////////////////////////////////////////////////////////////////// package channels import ( "github.com/golang/protobuf/proto" "gitlab.com/elixxir/crypto/channel" ) // userMessageInternal is the internal structure of a UserMessage protobuf. type userMessageInternal struct { userMessage *UserMessage channelMessage *ChannelMessage messageID channel.MessageID } func newUserMessageInternal(ursMsg *UserMessage) (*userMessageInternal, error) { chanMessage := &ChannelMessage{} err := proto.Unmarshal(ursMsg.Message, chanMessage) if err != nil { return nil, err } channelMessage := chanMessage return &userMessageInternal{ userMessage: ursMsg, channelMessage: channelMessage, messageID: channel.MakeMessageID(ursMsg.Message), }, nil } func unmarshalUserMessageInternal(usrMsg []byte) (*userMessageInternal, error) { um := &UserMessage{} if err := proto.Unmarshal(usrMsg, um); err != nil { return nil, err } chanMessage := &ChannelMessage{} err := proto.Unmarshal(um.Message, chanMessage) if err != nil { return nil, err } channelMessage := chanMessage return &userMessageInternal{ userMessage: um, channelMessage: channelMessage, messageID: channel.MakeMessageID(um.Message), }, nil } // GetUserMessage retrieves the UserMessage within // userMessageInternal. func (umi *userMessageInternal) GetUserMessage() *UserMessage { return umi.userMessage } // GetChannelMessage retrieves the ChannelMessage within // userMessageInternal. func (umi *userMessageInternal) GetChannelMessage() *ChannelMessage { return umi.channelMessage } // GetMessageID retrieves the messageID for the message. func (umi *userMessageInternal) GetMessageID() channel.MessageID { return umi.messageID }