Index: mojo/public/python/mojo/bindings/reflection.py |
diff --git a/mojo/public/python/mojo/bindings/reflection.py b/mojo/public/python/mojo/bindings/reflection.py |
index bb8dfe803327dffe1f70f30d7969553db38879b1..d77bdb3abe5b6a86bc67400522a22101f1ff0645 100644 |
--- a/mojo/public/python/mojo/bindings/reflection.py |
+++ b/mojo/public/python/mojo/bindings/reflection.py |
@@ -4,6 +4,12 @@ |
"""The metaclasses used by the mojo python bindings.""" |
+import itertools |
+ |
+# pylint: disable=F0401 |
+import mojo.bindings.serialization as serialization |
+ |
+ |
class MojoEnumType(type): |
"""Meta class for enumerations. |
@@ -85,12 +91,22 @@ class MojoStructType(type): |
dictionary[key] = MojoEnumType(key, (object,), { 'VALUES': enums[key] }) |
# Add fields |
- for field in descriptor.get('fields', []): |
+ groups = descriptor.get('fields', []) |
+ |
+ fields = list( |
+ itertools.chain.from_iterable([group.descriptors for group in groups])) |
+ for field in fields: |
dictionary[field.name] = _BuildProperty(field) |
# Add init |
dictionary['__init__'] = _StructInit |
+ # Add serialization method |
+ serialization_object = serialization.Serialization(groups) |
+ def Serialize(self, handle_offset=0): |
+ return serialization_object.Serialize(self, handle_offset) |
+ dictionary['Serialize'] = Serialize |
+ |
return type.__new__(mcs, name, bases, dictionary) |
# Prevent adding new attributes, or mutating constants. |