github.com/mongodb/grip@v0.0.0-20240213223901-f906268d82b9/message/line.go (about)

     1  package message
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/mongodb/grip/level"
     8  )
     9  
    10  type lineMessenger struct {
    11  	lines   []interface{}
    12  	Base    `bson:"metadata" json:"metadata" yaml:"metadata"`
    13  	Message string `bson:"message" json:"message" yaml:"message"`
    14  }
    15  
    16  // NewLineMessage is a basic constructor for a type that, given a
    17  // bunch of arguments, calls fmt.Sprintln() on the arguments passed to
    18  // the constructor during the String() operation. Use in combination
    19  // with Compose[*] logging methods.
    20  func NewLineMessage(p level.Priority, args ...interface{}) Composer {
    21  	m := NewLine(args...)
    22  	_ = m.SetPriority(p)
    23  	return m
    24  }
    25  
    26  // NewLine returns a message Composer roughly equivalent to
    27  // fmt.Sprintln().
    28  func NewLine(args ...interface{}) Composer {
    29  	m := &lineMessenger{}
    30  	for _, arg := range args {
    31  		if arg != nil {
    32  			m.lines = append(m.lines, arg)
    33  		}
    34  	}
    35  
    36  	return m
    37  }
    38  
    39  func newLinesFromStrings(p level.Priority, args []string) Composer {
    40  	m := &lineMessenger{}
    41  	_ = m.SetPriority(p)
    42  	for _, arg := range args {
    43  		if arg != "" {
    44  			m.lines = append(m.lines, arg)
    45  		}
    46  	}
    47  
    48  	return m
    49  }
    50  
    51  func (l *lineMessenger) Loggable() bool {
    52  	if len(l.lines) <= 0 {
    53  		return false
    54  	}
    55  
    56  	for idx := range l.lines {
    57  		if l.lines[idx] != "" {
    58  			return true
    59  		}
    60  	}
    61  
    62  	return false
    63  }
    64  
    65  func (l *lineMessenger) String() string {
    66  	if l.Message == "" {
    67  		l.Message = strings.Trim(fmt.Sprintln(l.lines...), "\n ")
    68  	}
    69  
    70  	return l.Message
    71  }
    72  
    73  func (l *lineMessenger) Raw() interface{} {
    74  	_ = l.Collect(true)
    75  	_ = l.String()
    76  
    77  	return l
    78  }