Skip to content

Commit 4ea931e

Browse files
committed
Read uint to int
Addresses tinylib#134 in a way that makes it more interoperable with other msgpack libraries. The actual code borrowed from librato#1
1 parent 1cce05a commit 4ea931e

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

msgp/read.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,42 @@ func (m *Reader) ReadInt64() (i int64, err error) {
607607
i = getMint64(p)
608608
return
609609

610+
case muint8:
611+
p, err = m.R.Next(2)
612+
if err != nil {
613+
return
614+
}
615+
i = int64(getMuint8(p))
616+
return
617+
618+
case muint16:
619+
p, err = m.R.Next(3)
620+
if err != nil {
621+
return
622+
}
623+
i = int64(getMuint16(p))
624+
return
625+
626+
case muint32:
627+
p, err = m.R.Next(5)
628+
if err != nil {
629+
return
630+
}
631+
i = int64(getMuint32(p))
632+
return
633+
634+
case muint64:
635+
p, err = m.R.Next(9)
636+
if err != nil {
637+
return
638+
}
639+
u := getMuint64(p)
640+
if u > math.MaxInt64 {
641+
err = badPrefix(IntType, lead)
642+
}
643+
i = int64(u)
644+
return
645+
610646
default:
611647
err = badPrefix(IntType, lead)
612648
return

msgp/read_bytes.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,46 @@ func ReadInt64Bytes(b []byte) (i int64, o []byte, err error) {
395395
o = b[9:]
396396
return
397397

398+
case muint8:
399+
if l < 2 {
400+
err = ErrShortBytes
401+
return
402+
}
403+
i = int64(getMuint8(b))
404+
o = b[2:]
405+
return
406+
407+
case muint16:
408+
if l < 3 {
409+
err = ErrShortBytes
410+
return
411+
}
412+
i = int64(getMuint16(b))
413+
o = b[3:]
414+
return
415+
416+
case muint32:
417+
if l < 5 {
418+
err = ErrShortBytes
419+
return
420+
}
421+
i = int64(getMuint32(b))
422+
o = b[5:]
423+
return
424+
425+
case muint64:
426+
if l < 9 {
427+
err = ErrShortBytes
428+
return
429+
}
430+
u := getMuint64(b)
431+
if u > math.MaxInt64 {
432+
err = badPrefix(IntType, lead)
433+
}
434+
i = int64(u)
435+
o = b[9:]
436+
return
437+
398438
default:
399439
err = badPrefix(IntType, lead)
400440
return

0 commit comments

Comments
 (0)