codekingpro/portable-devtools
115k
1from ._buffer import Buffer, BufferReadError, BufferWriteError # noqa
2
3UINT_VAR_MAX = 0x3FFFFFFFFFFFFFFF
4UINT_VAR_MAX_SIZE = 8
5
6
7def encode_uint_var(value: int) -> bytes:
8 """
9 Encode a variable-length unsigned integer.
10 """
11 buf = Buffer(capacity=UINT_VAR_MAX_SIZE)
12 buf.push_uint_var(value)
13 return buf.data
14
15
16def size_uint_var(value: int) -> int:
17 """
18 Return the number of bytes required to encode the given value
19 as a QUIC variable-length unsigned integer.
20 """
21 if value <= 0x3F:
22 return 1
23 elif value <= 0x3FFF:
24 return 2
25 elif value <= 0x3FFFFFFF:
26 return 4
27 elif value <= 0x3FFFFFFFFFFFFFFF:
28 return 8
29 else:
30 raise ValueError("Integer is too big for a variable-length integer")
31 