def build(cls, obj, res=None, ctx=None): if res is None: res = b'' if ctx is None: ctx = {} if cls._struct_fields: for name, struct in cls._struct_fields: try: if name in obj: res += struct.build(obj[name], ctx=ctx) else: res += struct.build(None, ctx=ctx) except: print("Context at time of failure:", ctx) raise else: res = cls._build(obj, ctx=ctx) return res