github.com/ssgreg/logf@v1.4.1/encoder.go (about)

     1  package logf
     2  
     3  import (
     4  	"time"
     5  	"unsafe"
     6  )
     7  
     8  // Encoder defines the interface to create your own log format.
     9  //
    10  // In case of error, Encoder must remove bytes related to the given Entry
    11  // from the Buffer.
    12  type Encoder interface {
    13  	Encode(*Buffer, Entry) error
    14  }
    15  
    16  // ArrayEncoder defines the interface to create your own array logger.
    17  //
    18  // Example:
    19  //
    20  // type stringArray []string
    21  //
    22  // 	func (o stringArray) EncodeLogfArray(e TypeEncoder) error {
    23  // 		for i := range o {
    24  // 			e.EncodeTypeString(o[i])
    25  // 		}
    26  //
    27  // 		return nil
    28  // 	}
    29  //
    30  type ArrayEncoder interface {
    31  	EncodeLogfArray(TypeEncoder) error
    32  }
    33  
    34  // ObjectEncoder defines the interface to create your own object logger.
    35  //
    36  // Example:
    37  //
    38  // 	type user struct {
    39  // 		Username string
    40  // 		Password string
    41  // 	}
    42  //
    43  // 	func (u user) EncodeLogfObject(e FieldEncoder) error {
    44  // 		e.EncodeFieldString("username", u.Username)
    45  // 		e.EncodeFieldString("password", u.Password)
    46  //
    47  // 		return nil
    48  // 	}
    49  //
    50  type ObjectEncoder interface {
    51  	EncodeLogfObject(FieldEncoder) error
    52  }
    53  
    54  // TypeEncoder defines the interface that allows to encode basic types.
    55  // Encoder companion.
    56  type TypeEncoder interface {
    57  	EncodeTypeAny(interface{})
    58  	EncodeTypeBool(bool)
    59  	EncodeTypeInt64(int64)
    60  	EncodeTypeInt32(int32)
    61  	EncodeTypeInt16(int16)
    62  	EncodeTypeInt8(int8)
    63  	EncodeTypeUint64(uint64)
    64  	EncodeTypeUint32(uint32)
    65  	EncodeTypeUint16(uint16)
    66  	EncodeTypeUint8(uint8)
    67  	EncodeTypeFloat64(float64)
    68  	EncodeTypeFloat32(float32)
    69  	EncodeTypeDuration(time.Duration)
    70  	EncodeTypeTime(time.Time)
    71  	EncodeTypeString(string)
    72  	EncodeTypeStrings([]string)
    73  	EncodeTypeBytes([]byte)
    74  	EncodeTypeBools([]bool)
    75  	EncodeTypeInts64([]int64)
    76  	EncodeTypeInts32([]int32)
    77  	EncodeTypeInts16([]int16)
    78  	EncodeTypeInts8([]int8)
    79  	EncodeTypeUints64([]uint64)
    80  	EncodeTypeUints32([]uint32)
    81  	EncodeTypeUints16([]uint16)
    82  	EncodeTypeUints8([]uint8)
    83  	EncodeTypeFloats64([]float64)
    84  	EncodeTypeFloats32([]float32)
    85  	EncodeTypeDurations([]time.Duration)
    86  	EncodeTypeArray(ArrayEncoder)
    87  	EncodeTypeObject(ObjectEncoder)
    88  	EncodeTypeUnsafeBytes(unsafe.Pointer)
    89  }
    90  
    91  // FieldEncoder defines the interface that allows to encode basic types with
    92  // field names. Encoder companion.
    93  type FieldEncoder interface {
    94  	EncodeFieldAny(string, interface{})
    95  	EncodeFieldBool(string, bool)
    96  	EncodeFieldInt64(string, int64)
    97  	EncodeFieldInt32(string, int32)
    98  	EncodeFieldInt16(string, int16)
    99  	EncodeFieldInt8(string, int8)
   100  	EncodeFieldUint64(string, uint64)
   101  	EncodeFieldUint32(string, uint32)
   102  	EncodeFieldUint16(string, uint16)
   103  	EncodeFieldUint8(string, uint8)
   104  	EncodeFieldFloat64(string, float64)
   105  	EncodeFieldFloat32(string, float32)
   106  	EncodeFieldDuration(string, time.Duration)
   107  	EncodeFieldError(string, error)
   108  	EncodeFieldTime(string, time.Time)
   109  	EncodeFieldString(string, string)
   110  	EncodeFieldStrings(string, []string)
   111  	EncodeFieldBytes(string, []byte)
   112  	EncodeFieldBools(string, []bool)
   113  	EncodeFieldInts64(string, []int64)
   114  	EncodeFieldInts32(string, []int32)
   115  	EncodeFieldInts16(string, []int16)
   116  	EncodeFieldInts8(string, []int8)
   117  	EncodeFieldUints64(string, []uint64)
   118  	EncodeFieldUints32(string, []uint32)
   119  	EncodeFieldUints16(string, []uint16)
   120  	EncodeFieldUints8(string, []uint8)
   121  	EncodeFieldFloats64(string, []float64)
   122  	EncodeFieldFloats32(string, []float32)
   123  	EncodeFieldDurations(string, []time.Duration)
   124  	EncodeFieldArray(string, ArrayEncoder)
   125  	EncodeFieldObject(string, ObjectEncoder)
   126  }
   127  
   128  // TypeEncoderFactory defines the interface that allows to reuse Encoder
   129  // internal-defined TypeEncoder in other encoder.
   130  //
   131  // E.g. logf json encoder implements TypeEncoderFactory allowing all other
   132  // encoders to use json encoding functionality in some cases.
   133  type TypeEncoderFactory interface {
   134  	TypeEncoder(*Buffer) TypeEncoder
   135  }