async def read_delim(reader: Reader) -> bytes: msg_bytes = await read_varint_prefixed_bytes(reader) if len(msg_bytes) == 0: raise ParseError(f"`len(msg_bytes)` should not be 0") if msg_bytes[-1:] != b"\n": raise ParseError( f'`msg_bytes` is not delimited by b"\\n": `msg_bytes`={msg_bytes!r}' ) return msg_bytes[:-1]
async def decode_uvarint_from_stream(reader: Reader) -> int: """ https://en.wikipedia.org/wiki/LEB128 """ res = 0 for shift in itertools.count(0, 7): if shift > SHIFT_64_BIT_MAX: raise ParseError( "TODO: better exception msg: Integer is too large...") byte = await reader.read(1) try: value = byte[0] except IndexError: raise ParseError( "Unexpected end of stream while parsing LEB128 encoded integer" ) res += (value & LOW_MASK) << shift if not value & HIGH_MASK: break return res
async def decode_uvarint_from_stream(reader: Reader) -> int: """https://en.wikipedia.org/wiki/LEB128.""" res = 0 for shift in itertools.count(0, 7): if shift > SHIFT_64_BIT_MAX: raise ParseError( "TODO: better exception msg: Integer is too large...") byte = await read_exactly(reader, 1) value = byte[0] res += (value & LOW_MASK) << shift if not value & HIGH_MASK: break return res