class field_encoder: def __init__(self, target: object) -> None: self.__target = target def code(self) -> bytes: if self.__target.target_type is str: return self.__code_str(self.__target.get()) if self.__target.target_type is int: return self.__code_int(self.__target.get()) if self.__target.target_type is float: return self.__code_float(self.__target.get()) if self.__target.target_type is bytes: return self.__target.get() if self.__target.target_type is bool: return self.__code_bool(self.__target.get()) raise TypeError("Can not encode field, unsupported type.") def __code_str(self, content: str) -> bytes: result = content.encode() difference = self.__target.size - len(result) if difference > 0: return result + bytes(difference) if difference < 0: return result[0:self.__target.size] return result def __code_int(self, content: int) -> bytes: return content.to_bytes(self.__target.size) def __code_float(self, content: float) -> bytes: precission = pow(10, self.float_precission) as_int = int(content * precission) result = as_int.to_bytes(self.__target.size) return result def __code_bool(self, content: bool) -> bytes: as_int = int(1 if content else 0) result = as_int.to_bytes(self.__target.size) return result