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  }