| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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
|