Source code for angr.serializable
[docs]class Serializable:
"""
The base class of all protobuf-serializable classes in angr.
"""
__slots__ = ()
@classmethod
def _get_cmsg(cls):
"""
Get a cmessage object.
:return: The correct cmessage object.
"""
raise NotImplementedError()
[docs] def serialize_to_cmessage(self):
"""
Serialize the class object and returns a protobuf cmessage object.
:return: A protobuf cmessage object.
:rtype: protobuf.cmessage
"""
raise NotImplementedError()
[docs] def serialize(self):
"""
Serialize the class object and returns a bytes object.
:return: A bytes object.
:rtype: bytes
"""
return self.serialize_to_cmessage().SerializeToString()
[docs] @classmethod
def parse_from_cmessage(cls, cmsg, **kwargs):
"""
Parse a protobuf cmessage and create a class object.
:param cmsg: The probobuf cmessage object.
:return: A unserialized class object.
:rtype: cls
"""
raise NotImplementedError()
[docs] @classmethod
def parse(cls, s, **kwargs):
"""
Parse a bytes object and create a class object.
:param bytes s: A bytes object.
:return: A class object.
:rtype: cls
"""
pb2_obj = cls._get_cmsg()
pb2_obj.ParseFromString(s)
return cls.parse_from_cmessage(pb2_obj, **kwargs)