github.com/3andne/restls-client-go@v0.1.6/quicvarint/quicvarint.go (about) 1 package quicvarint 2 3 import "fmt" 4 5 // taken from the QUIC draft 6 const ( 7 // Min is the minimum value allowed for a QUIC varint. 8 Min = 0 9 10 // Max is the maximum allowed value for a QUIC varint (2^62-1). 11 Max = maxVarInt8 12 13 maxVarInt1 = 63 14 maxVarInt2 = 16383 15 maxVarInt4 = 1073741823 16 maxVarInt8 = 4611686018427387903 17 ) 18 19 func Append(b []byte, i uint64) []byte { 20 if i <= maxVarInt1 { 21 return append(b, uint8(i)) 22 } 23 if i <= maxVarInt2 { 24 return append(b, []byte{uint8(i>>8) | 0x40, uint8(i)}...) 25 } 26 if i <= maxVarInt4 { 27 return append(b, []byte{uint8(i>>24) | 0x80, uint8(i >> 16), uint8(i >> 8), uint8(i)}...) 28 } 29 if i <= maxVarInt8 { 30 return append(b, []byte{ 31 uint8(i>>56) | 0xc0, uint8(i >> 48), uint8(i >> 40), uint8(i >> 32), 32 uint8(i >> 24), uint8(i >> 16), uint8(i >> 8), uint8(i), 33 }...) 34 } 35 panic(fmt.Sprintf("%#x doesn't fit into 62 bits", i)) 36 }