MCPcopy
hub / github.com/tinylib/msgp / ReadTime

Method ReadTime

msgp/read.go:1405–1477  ·  view source on GitHub ↗

ReadTime reads a time.Time object from the reader. The returned time's location will be set to time.Local.

()

Source from the content-addressed store, hash-verified

1403// ReadTime reads a time.Time object from the reader.
1404// The returned time's location will be set to time.Local.
1405func (m *Reader) ReadTime() (t time.Time, err error) {
1406 offset, length, extType, err := m.peekExtensionHeader()
1407 if err != nil {
1408 return t, err
1409 }
1410
1411 switch extType {
1412 case TimeExtension:
1413 var p []byte
1414 p, err = m.R.Peek(15)
1415 if err != nil {
1416 return
1417 }
1418 if p[0] != mext8 || p[1] != 12 {
1419 err = badPrefix(TimeType, p[0])
1420 return
1421 }
1422 if int8(p[2]) != TimeExtension {
1423 err = errExt(int8(p[2]), TimeExtension)
1424 return
1425 }
1426 sec, nsec := getUnix(p[3:])
1427 t = time.Unix(sec, int64(nsec)).Local()
1428 _, err = m.R.Skip(15)
1429 return
1430 case MsgTimeExtension:
1431 switch length {
1432 case 4, 8, 12:
1433 var tmp [12]byte
1434 _, err = m.R.Skip(offset)
1435 if err != nil {
1436 return
1437 }
1438 var n int
1439 n, err = m.R.Read(tmp[:length])
1440 if err != nil {
1441 return
1442 }
1443 if n != length {
1444 err = ErrShortBytes
1445 return
1446 }
1447 b := tmp[:length]
1448 switch length {
1449 case 4:
1450 t = time.Unix(int64(binary.BigEndian.Uint32(b)), 0).Local()
1451 case 8:
1452 v := binary.BigEndian.Uint64(b)
1453 nanos := int64(v >> 34)
1454 if nanos > 999999999 {
1455 // In timestamp 64 and timestamp 96 formats, nanoseconds must not be larger than 999999999.
1456 err = InvalidTimestamp{Nanos: nanos}
1457 return
1458 }
1459 t = time.Unix(int64(v&(1<<34-1)), nanos).Local()
1460 case 12:
1461 nanos := int64(binary.BigEndian.Uint32(b))
1462 if nanos > 999999999 {

Callers 7

TestTimeFunction · 0.95
BenchmarkReadTimeFunction · 0.95
FuzzReaderFunction · 0.95
ReadTimeUTCMethod · 0.95
ReadIntfMethod · 0.95
TestWriteTimeFunction · 0.80
rwTimeFunction · 0.80

Calls 6

peekExtensionHeaderMethod · 0.95
badPrefixFunction · 0.85
errExtFunction · 0.85
getUnixFunction · 0.85
SkipMethod · 0.80
ReadMethod · 0.45

Tested by 4

TestTimeFunction · 0.76
BenchmarkReadTimeFunction · 0.76
FuzzReaderFunction · 0.76
TestWriteTimeFunction · 0.64