From ded655911e1e2450d02d4f6037993a2381c7d725 Mon Sep 17 00:00:00 2001 From: Lonami Date: Mon, 26 Sep 2016 16:10:07 +0200 Subject: [PATCH] Added ability to both read and write vectors* This change affects the BinaryReader and BinaryWriter Note that it only allows to write vectors of **TLObjects**, not any other type --- telethon/utils/binary_reader.py | 8 ++++++++ telethon/utils/binary_writer.py | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/telethon/utils/binary_reader.py b/telethon/utils/binary_reader.py index 50fd2359..0413f12f 100755 --- a/telethon/utils/binary_reader.py +++ b/telethon/utils/binary_reader.py @@ -128,6 +128,14 @@ class BinaryReader: result.on_response(self) return result + def tgread_vector(self): + """Reads a vector (a list) of Telegram objects""" + if 0x1cb5c415 != self.read_int(signed=False): + raise ValueError('Invalid constructor code, vector was expected') + + count = self.read_int() + return [self.tgread_object() for _ in range(count)] + # endregion def close(self): diff --git a/telethon/utils/binary_writer.py b/telethon/utils/binary_writer.py index b448750a..026d139c 100755 --- a/telethon/utils/binary_writer.py +++ b/telethon/utils/binary_writer.py @@ -95,6 +95,17 @@ class BinaryWriter: value = 0 if datetime is None else int(datetime.timestamp()) self.write_int(value) + def tgwrite_object(self, tlobject): + """Writes a Telegram object""" + tlobject.on_send(self) + + def tgwrite_vector(self, vector): + """Writes a vector of Telegram objects""" + self.write_int(0x1cb5c415, signed=False) # Vector's constructor ID + self.write_int(len(vector)) + for item in vector: + self.tgwrite_object(item) + # endregion def flush(self):