class Integer(IdlStruct):
    seq: int
    keyval: int
    key("seq")
    key("keyval")

    @classmethod
    def postfix(cls):
        return "integer"
class IntSequence(IdlStruct):
    seq: int
    keyval: sequence[int]
    key("seq")
    key("keyval")

    @classmethod
    def postfix(cls):
        return "int_sequence"
class String(IdlStruct):
    seq: int
    keyval: str
    key("seq")
    key("keyval")

    @classmethod
    def postfix(cls):
        return "string"
class StrSequence(IdlStruct):
    seq: int
    keyval: sequence[str, 100]  # max 100 string elements
    key("seq")
    key("keyval")

    @classmethod
    def postfix(cls):
        return "str_sequence"
class StrArray(IdlStruct):
    seq: int
    keyval: array[str, 5]
    key("seq")
    key("keyval")

    @staticmethod
    def size():
        return 5

    @classmethod
    def postfix(cls):
        return "str_array"
class IntArray(IdlStruct):
    seq: int
    keyval: array[int, 3]
    key("seq")
    key("keyval")

    @staticmethod
    def size():
        return 3

    @classmethod
    def postfix(cls):
        return "int_array"
class SingleEnum(IdlStruct):
    value: BasicEnum
    key("value")
class SingleBool(IdlStruct):
    value: bool
    key("value")
class SingleFloat(IdlStruct):
    value: float
    key("value")
class SingleInt(IdlStruct):
    value: int
    key("value")
class XStruct(IdlStruct):
    A: XUnion
    k: int
    key('k')
class SingleString(IdlStruct):
    value: str
    key("value")
class Keyed2(IdlStruct):
    a: int
    key("a")
    b: int
class SingleSequence(IdlStruct):
    value: pt.sequence[int]
    key("value")
class SingleBoundedString(IdlStruct):
    value: pt.bounded_str[10]
    key("value")
class SingleBoundedSequence(IdlStruct):
    value: pt.sequence[int, 3]
    key("value")
class SingleUint16(IdlStruct):
    value: pt.uint16
    key("value")
class SingleArray(IdlStruct):
    value: pt.array[pt.uint16, 3]
    key("value")
class SingleNested(IdlStruct):
    value: SingleInt
    key("value")
class SingleUnion(IdlStruct):
    value: EasyUnion
    key("value")