class Thing(dictobj.PacketSpec): fields = [ ("one", T.Uint8.enum(E).multiple(3).default(E.ZERO)), ("two", T.Int32.multiple(3).default(0)), ("three", T.String(32).multiple(3).default(lambda pkt: "")), ("four", T.Bytes(40).multiple(3, kls=Other)), ]
class Thing(dictobj.PacketSpec): fields = [ ("one", T.Uint8.enum(E).multiple(4).default(E.ZERO)), ("two", T.Int32.multiple(3).default(0)), ("three", T.String(32).multiple(3)), ("four", T.Bytes(8).multiple(1, kls=Other)), ("five", T.Uint8.enum(E, allow_unknown=False).multiple(3).default(E.ZERO)), ]
class Group2(dictobj.PacketSpec): fields = [ ( "two", T.Int16.transform( lambda _, v: (int(str(v).split(".")[0]) << 0x10) + int(str(v).split(".")[1]), lambda _, v: float("{0}.{1}".format(v >> 0x10, v & 0xFF)), ), ), ("mod", T.String.default(lambda p: "{0}.modified".format(p["two"]))), ("sb", T.Int8), ("bts", T.Bytes(lambda p: p["sb"])), ]
class Q(dictobj.PacketSpec): fields = [("things", T.Bytes(16).multiple(3, kls=lambda pkt: P))]
class Payload(dictobj.PacketSpec): message_type = 52 represents_ack = True fields = [("one", T.Bytes(16))]
def spec(self): return T.Bytes(20)
class Other(dictobj.PacketSpec): fields = [ ("one", T.BoolInt), ("five", T.Bytes(16).multiple(2).default(lambda pkt: b"")), ]
class Thing(dictobj.PacketSpec): fields = [ ("one", T.BoolInt), ("two", T.Int32.multiple(2).default(0)), ("three", T.Bytes(4).multiple(2, kls=Other)), ]
class Chooser(dictobj.PacketSpec): fields = [ ("choice", T.String(64)), ("amount", T.Uint8), ("val", T.Bytes(32).multiple(lambda pkt: pkt.amount, kls=choose_kls)), ]
class Thing(dictobj.PacketSpec): fields = [("thing", T.Bytes(72).multiple(3, kls=Other))]
thing.four[0] = {"one": "asdf"} self.assertProperties(thing, partial(test_thing, UnknownEnum(6))) it "can set as bytes": class E(enum.Enum): ZERO = 0 MEH = 1 BLAH = 2 class Other(dictobj.PacketSpec): fields = [("other", T.BoolInt), ("another", T.String(64).default(""))] one_fields = [("one", T.Uint8.enum(E).multiple(3).default(E.ZERO))] two_fields = [("two", T.Bytes(72).multiple(3, kls=Other))] class One(dictobj.PacketSpec): fields = one_fields class Two(dictobj.PacketSpec): fields = two_fields class Thing(dictobj.PacketSpec): fields = [*one_fields, *two_fields] one = One(one=[1, "BLAH", repr(E.ZERO)]) two = Two( two=[ {"other": False, "another": "wat"}, {"other": True},
class Group2(dictobj.PacketSpec): fields = [("three", T.Bytes(100).multiple(3, kls=three_typ)), ("four", four_typ)]
class Group1(dictobj.PacketSpec): fields = [("one", one_typ), ("two", T.Bytes(1).multiple(3, kls=two_typ))]