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 }