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  }