From 6c45fe46dd6abebef835c93b2b72819ceed570f2 Mon Sep 17 00:00:00 2001 From: Viktor Oreshkin Date: Fri, 8 Dec 2017 12:06:40 +0300 Subject: [PATCH] More general Vector handling in results Also, previous code implied that Vector count is written as long --- telethon_generator/tl_generator.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/telethon_generator/tl_generator.py b/telethon_generator/tl_generator.py index 60f07bd6..81e48065 100644 --- a/telethon_generator/tl_generator.py +++ b/telethon_generator/tl_generator.py @@ -687,21 +687,17 @@ class TLGenerator: will be written """ if tlobject.result.startswith('Vector<'): - # Vector results are a bit special since they can also be composed - # of integer values and such; however, the result of requests is - # not parsed as arguments are and it's a bit harder to tell which - # is which. - if tlobject.result == 'Vector': + # Check if Vector contents are boxed or not + # We're implying that constructor names always + # start with lowecase and types start with uppercase + match = re.match(r'Vector<([\w\d]+)>', tlobject.result) + if match and match.group(1).lower(): + inner_type = match.group(1) + # not boxed builder.writeln('reader.read_int() # Vector id') builder.writeln('count = reader.read_int()') builder.writeln( - 'self.result = [reader.read_int() for _ in range(count)]' - ) - elif tlobject.result == 'Vector': - builder.writeln('reader.read_int() # Vector id') - builder.writeln('count = reader.read_long()') - builder.writeln( - 'self.result = [reader.read_long() for _ in range(count)]' + 'self.result = [reader.read_{}() for _ in range(count)]'.format(inner_type) ) else: builder.writeln('self.result = reader.tgread_vector()')