[docs]classDeserializer:""" The Deserializer class is responsible for converting payload data into Python objects. """__slots__=()
[docs]defprocess(self,reader:Reader)->Any:""" Method to deserialize data from the provided Reader object. Parameters ---------- reader: The Reader object containing the payload data. """handlers:dict[bytes,Callable[[Reader],Any]]={b"+":self.deserialize_sstr,b"$":self.deserialize_str,b":":self.deserialize_int,b",":self.deserialize_float,b"#":self.deserialize_bool,b"_":self.deserialize_none,b"*":self.deserialize_array,b"%":self.deserialize_map,}returnhandlers[reader.read(1)](reader)
[docs]@staticmethoddefdeserialize_str(reader:Reader)->str:"""Method to deserialize a payload data to string."""reader.read_until(b"\n")# Skip $lenght element.returnreader.read_until(b"\n").decode()
[docs]@staticmethoddefdeserialize_sstr(reader:Reader)->str:"""Method to deserialize a payload data to string."""returnreader.read_until(b"\n").decode()
[docs]@staticmethoddefdeserialize_int(reader:Reader)->int:"""Method to deserialize a payload data to integer."""returnint(reader.read_until(b"\n"))
[docs]@staticmethoddefdeserialize_float(reader:Reader)->float:"""Method to deserialize a payload data to float."""returnfloat(reader.read_until(b"\n"))
[docs]@staticmethoddefdeserialize_bool(reader:Reader)->bool:"""Method to deserialize a payload data to boolean."""returnreader.read_until(b"\n")==b"t"
[docs]@staticmethoddefdeserialize_none(reader:Reader)->None:"""Method to deserialize a payload data to None."""reader.read_until(b"\n")# We don't care about this.returnNone
[docs]defdeserialize_array(self,reader:Reader)->List[Any]:"""Method to deserialize a payload data to array."""array_size:int=int(reader.read_until(b"\n"))return[self.process(reader)for_inrange(array_size)]
[docs]defdeserialize_map(self,reader:Reader)->dict[str,Any]:"""Method to deserialize a payload data to dictionary."""map_size:int=int(reader.read_until(b"\n"))return{self.process(reader):self.process(reader)for_inrange(map_size)}