from .field import field from .message_coder import message_coder from .message_encoder import message_encoder class message: _type = None def __init__(self) -> None: self.__fields = list() if self._type is None: raise RuntimeError("Message type can not being None.") @classmethod def get_type(cls) -> int: return cls._type @property def fields(self) -> tuple: return tuple(self.__fields) def _add_field(self, target: field) -> None: if target in self.__fields: return self.__fields.append(target) title = target.title setter = lambda content: target.set(content) getter = lambda : target.get() setattr(self, "set_" + title, setter) setattr(self, "get_" + title, getter) @property def size(self) -> int: result = 0 for count in self.__fields: result += count.size return result def __len__(self) -> int: return self.size def encoder(self) -> message_encoder: return message_encoder(self)