From 65ca3790cc5ce48ebdff2fae2b33d9689dd627cf Mon Sep 17 00:00:00 2001
From: Neal Patel <neal@ineal.me>
Date: Mon, 6 Mar 2023 13:33:36 -0800
Subject: [PATCH] Add message.Bytes() to avoid string conversion

---
 message.go      | 9 ++++++++-
 message_test.go | 2 ++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/message.go b/message.go
index 6fd76918..63dca904 100644
--- a/message.go
+++ b/message.go
@@ -272,7 +272,6 @@ func ParseMessageWithDataDictionary(
 	}
 
 	return
-
 }
 
 func isHeaderField(tag Tag, dataDict *datadictionary.DataDictionary) bool {
@@ -390,6 +389,14 @@ func extractField(parsedFieldBytes *TagValue, buffer []byte) (remBytes []byte, e
 	return buffer[(endIndex + 1):], err
 }
 
+func (m *Message) Bytes() []byte {
+	if m.rawMessage != nil {
+		return m.rawMessage.Bytes()
+	}
+
+	return m.build()
+}
+
 func (m *Message) String() string {
 	if m.rawMessage != nil {
 		return m.rawMessage.String()
diff --git a/message_test.go b/message_test.go
index 7c5557b9..9bb22375 100644
--- a/message_test.go
+++ b/message_test.go
@@ -222,12 +222,14 @@ func (s *MessageSuite) TestCopyIntoMessage() {
 	s.Nil(ParseMessage(s.msg, bytes.NewBufferString(newMsgString)))
 	s.True(s.msg.IsMsgTypeOf("A"))
 	s.Equal(s.msg.String(), newMsgString)
+	s.Equal(string(s.msg.Bytes()), newMsgString)
 
 	// clear the source buffer also
 	msgBuf.Reset()
 
 	s.True(dest.IsMsgTypeOf("D"))
 	s.Equal(dest.String(), renderedString)
+	s.Equal(string(dest.Bytes()), renderedString)
 }
 
 func checkFieldInt(s *MessageSuite, fields FieldMap, tag, expected int) {
-- 
GitLab