switch to go vendoring
This commit is contained in:
+97
@@ -0,0 +1,97 @@
|
||||
package encoding
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
|
||||
"github.com/shamaton/msgpack/v2/ext"
|
||||
"github.com/shamaton/msgpack/v2/time"
|
||||
)
|
||||
|
||||
var extCoderMap = map[reflect.Type]ext.Encoder{time.Encoder.Type(): time.Encoder}
|
||||
var extCoders = []ext.Encoder{time.Encoder}
|
||||
|
||||
// AddExtEncoder adds encoders for extension types.
|
||||
func AddExtEncoder(f ext.Encoder) {
|
||||
// ignore time
|
||||
if f.Type() == time.Encoder.Type() {
|
||||
return
|
||||
}
|
||||
|
||||
_, ok := extCoderMap[f.Type()]
|
||||
if !ok {
|
||||
extCoderMap[f.Type()] = f
|
||||
updateExtCoders()
|
||||
}
|
||||
}
|
||||
|
||||
// RemoveExtEncoder removes encoders for extension types.
|
||||
func RemoveExtEncoder(f ext.Encoder) {
|
||||
// ignore time
|
||||
if f.Type() == time.Encoder.Type() {
|
||||
return
|
||||
}
|
||||
|
||||
_, ok := extCoderMap[f.Type()]
|
||||
if ok {
|
||||
delete(extCoderMap, f.Type())
|
||||
updateExtCoders()
|
||||
}
|
||||
}
|
||||
|
||||
func updateExtCoders() {
|
||||
extCoders = make([]ext.Encoder, len(extCoderMap))
|
||||
i := 0
|
||||
for k := range extCoderMap {
|
||||
extCoders[i] = extCoderMap[k]
|
||||
i++
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
func (e *encoder) isDateTime(value reflect.Value) (bool, time.Time) {
|
||||
i := value.Interface()
|
||||
switch t := i.(type) {
|
||||
case time.Time:
|
||||
return true, t
|
||||
}
|
||||
return false, now
|
||||
}
|
||||
|
||||
func (e *encoder) calcTime(t time.Time) int {
|
||||
secs := uint64(t.Unix())
|
||||
if secs>>34 == 0 {
|
||||
data := uint64(t.Nanosecond())<<34 | secs
|
||||
if data&0xffffffff00000000 == 0 {
|
||||
return def.Byte1 + def.Byte4
|
||||
}
|
||||
return def.Byte1 + def.Byte8
|
||||
}
|
||||
|
||||
return def.Byte1 + def.Byte1 + def.Byte4 + def.Byte8
|
||||
}
|
||||
|
||||
func (e *encoder) writeTime(t time.Time, offset int) int {
|
||||
secs := uint64(t.Unix())
|
||||
if secs>>34 == 0 {
|
||||
data := uint64(t.Nanosecond())<<34 | secs
|
||||
if data&0xffffffff00000000 == 0 {
|
||||
offset = e.setByte1Int(def.Fixext4, offset)
|
||||
offset = e.setByte1Int(def.TimeStamp, offset)
|
||||
offset = e.setByte4Uint64(data, offset)
|
||||
return offset
|
||||
}
|
||||
|
||||
offset = e.setByte1Int(def.Fixext8, offset)
|
||||
offset = e.setByte1Int(def.TimeStamp, offset)
|
||||
offset = e.setByte8Uint64(data, offset)
|
||||
return offset
|
||||
}
|
||||
|
||||
offset = e.setByte1Int(def.Ext8, offset)
|
||||
offset = e.setByte1Int(12, offset)
|
||||
offset = e.setByte1Int(def.TimeStamp, offset)
|
||||
offset = e.setByte4Int(t.Nanosecond(), offset)
|
||||
offset = e.setByte8Uint64(secs, offset)
|
||||
return offset
|
||||
}
|
||||
*/
|
||||
Reference in New Issue
Block a user