github.com/insolar/vanilla@v0.0.0-20201023172447-248fdf805322/args/lazy_fmt.go (about)

     1  // Copyright 2020 Insolar Network Ltd.
     2  // All rights reserved.
     3  // This material is licensed under the Insolar License version 1.0,
     4  // available at https://github.com/insolar/assured-ledger/blob/master/LICENSE.md.
     5  
     6  package args
     7  
     8  import (
     9  	"fmt"
    10  	"time"
    11  )
    12  
    13  func LazyStr(fn func() string) fmt.Stringer {
    14  	return &lazyStringer{fn}
    15  }
    16  
    17  func LazyFmt(format string, a ...interface{}) fmt.Stringer {
    18  	return &lazyStringer{func() string {
    19  		return fmt.Sprintf(format, a...)
    20  	}}
    21  }
    22  
    23  func LazyTimeFmt(format string, t time.Time) fmt.Stringer {
    24  	return &lazyStringer{func() string {
    25  		return t.Format(format)
    26  	}}
    27  }
    28  
    29  type lazyStringer struct {
    30  	fn func() string
    31  }
    32  
    33  func (v *lazyStringer) String() string {
    34  	return v.fn()
    35  }