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  }