github.com/webx-top/com@v1.2.12/formatter/stringer.go (about) 1 package formatter 2 3 import ( 4 "fmt" 5 6 "github.com/admpub/pp/ppnocolor" 7 "github.com/webx-top/com" 8 ) 9 10 type Encoder interface { 11 Encode(interface{}) string 12 } 13 14 type stringer struct { 15 raw interface{} 16 enc Encoder 17 } 18 19 func (s *stringer) SetEncoder(enc Encoder) { 20 s.enc = enc 21 } 22 23 func (s stringer) String() string { 24 return s.enc.Encode(s.raw) 25 } 26 27 func (s stringer) Raw() interface{} { 28 return s.raw 29 } 30 31 var JSONEncoder = jsonEncode{} 32 var PrettyEncoder = prettyEncode{} 33 34 type jsonEncode struct { 35 } 36 37 func (s jsonEncode) Encode(v interface{}) string { 38 return com.Dump(v, false) 39 } 40 41 type prettyEncode struct { 42 } 43 44 func (s prettyEncode) Encode(v interface{}) string { 45 return ppnocolor.Sprint(v) 46 } 47 48 func AsStringer(v interface{}, encoder ...Encoder) fmt.Stringer { 49 var enc Encoder 50 if len(encoder) > 0 { 51 enc = encoder[0] 52 } 53 if enc == nil { 54 enc = JSONEncoder 55 } 56 return stringer{raw: v, enc: enc} 57 }