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 }