github.com/mongodb/grip@v0.0.0-20240213223901-f906268d82b9/message/format.go (about) 1 package message 2 3 import ( 4 "fmt" 5 6 "github.com/mongodb/grip/level" 7 ) 8 9 type formatMessenger struct { 10 base string 11 args []interface{} 12 Base `bson:"metadata" json:"metadata" yaml:"metadata"` 13 Message string `bson:"message" json:"message" yaml:"message"` 14 } 15 16 // NewFormattedMessage takes arguments as fmt.Sprintf(), and returns 17 // an object that only runs the format operation as part of the 18 // String() method. 19 func NewFormattedMessage(p level.Priority, base string, args ...interface{}) Composer { 20 m := &formatMessenger{ 21 base: base, 22 args: args, 23 } 24 _ = m.SetPriority(p) 25 26 return m 27 } 28 29 // NewFormatted returns a message.Composer roughly equivalent to an 30 // fmt.Sprintf(). 31 func NewFormatted(base string, args ...interface{}) Composer { 32 return &formatMessenger{ 33 base: base, 34 args: args, 35 } 36 } 37 38 func (f *formatMessenger) String() string { 39 if f.Message == "" { 40 f.Message = fmt.Sprintf(f.base, f.args...) 41 } 42 43 return f.Message 44 } 45 46 func (f *formatMessenger) Loggable() bool { return f.base != "" } 47 48 func (f *formatMessenger) Raw() interface{} { 49 _ = f.String() 50 51 return f 52 }