MCPcopy Index your code
hub / github.com/vmihailenco/msgpack / DecodeTime

Method DecodeTime

time.go:77–126  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

75}
76
77func (d *Decoder) DecodeTime() (time.Time, error) {
78 c, err := d.readCode()
79 if err != nil {
80 return time.Time{}, err
81 }
82
83 // Legacy format.
84 if c == msgpcode.FixedArrayLow|2 {
85 sec, err := d.DecodeInt64()
86 if err != nil {
87 return time.Time{}, err
88 }
89
90 nsec, err := d.DecodeInt64()
91 if err != nil {
92 return time.Time{}, err
93 }
94
95 return time.Unix(sec, nsec), nil
96 }
97
98 if msgpcode.IsString(c) {
99 s, err := d.string(c)
100 if err != nil {
101 return time.Time{}, err
102 }
103 return time.Parse(time.RFC3339Nano, s)
104 }
105
106 extID, extLen, err := d.extHeader(c)
107 if err != nil {
108 return time.Time{}, err
109 }
110
111 // NodeJS seems to use extID 13.
112 if extID != timeExtID && extID != 13 {
113 return time.Time{}, fmt.Errorf("msgpack: invalid time ext id=%d", extID)
114 }
115
116 tm, err := d.decodeTime(extLen)
117 if err != nil {
118 return tm, err
119 }
120
121 if tm.IsZero() {
122 // Zero time does not have timezone information.
123 return tm.UTC(), nil
124 }
125 return tm, nil
126}
127
128func (d *Decoder) decodeTime(extLen int) (time.Time, error) {
129 b, err := d.readN(extLen)

Callers 1

DecodeMethod · 0.95

Calls 7

readCodeMethod · 0.95
DecodeInt64Method · 0.95
stringMethod · 0.95
extHeaderMethod · 0.95
decodeTimeMethod · 0.95
IsStringFunction · 0.92
IsZeroMethod · 0.65

Tested by

no test coverage detected