github.com/mongodb/grip@v0.0.0-20240213223901-f906268d82b9/message/raw_bytes.go (about) 1 // Bytes Messages 2 // 3 // The bytes types make it possible to send a byte slice as a message. 4 package message 5 6 import "github.com/mongodb/grip/level" 7 8 type bytesMessage struct { 9 data []byte 10 includeExtendedMetadata bool 11 Base 12 } 13 14 // NewBytesMessage provides a Composer interface around a byte slice, 15 // which are always loggable unless the string is empty. 16 func NewBytesMessage(p level.Priority, b []byte) Composer { 17 m := &bytesMessage{data: b} 18 _ = m.SetPriority(p) 19 return m 20 } 21 22 // NewBytes provides a basic message consisting of a single line. 23 func NewBytes(b []byte) Composer { 24 return &bytesMessage{data: b} 25 } 26 27 // NewExtendedBytesMessage is the same as NewBytesMessage but also collects 28 // extended logging metadata. 29 func NewExtendedBytesMessage(p level.Priority, b []byte) Composer { 30 m := &bytesMessage{ 31 data: b, 32 includeExtendedMetadata: true, 33 } 34 _ = m.SetPriority(p) 35 36 return m 37 } 38 39 // NewExtendedBytes is the same as NewBytes but also collects extended logging 40 // metadata. 41 func NewExtendedBytes(b []byte) Composer { 42 return &bytesMessage{ 43 data: b, 44 includeExtendedMetadata: true, 45 } 46 } 47 48 func (s *bytesMessage) String() string { 49 return string(s.data) 50 } 51 52 func (s *bytesMessage) Loggable() bool { 53 return len(s.data) > 0 54 } 55 56 func (s *bytesMessage) Raw() interface{} { 57 _ = s.Collect(s.includeExtendedMetadata) 58 return struct { 59 Metadata *Base `bson:"metadata" json:"metadata" yaml:"metadata"` 60 Message string `bson:"message" json:"message" yaml:"message"` 61 }{ 62 Metadata: &s.Base, 63 Message: string(s.data), 64 } 65 }