77 lines
2.0 KiB
Python
77 lines
2.0 KiB
Python
import json
|
|
|
|
|
|
class NestedInteger(object):
|
|
def __init__(self, value=None):
|
|
self.setInteger(value)
|
|
self._list = []
|
|
|
|
def __str__(self):
|
|
return self.__repr__()
|
|
|
|
def __repr__(self):
|
|
return (
|
|
"NestedInteger{_integer: "
|
|
+ str(self._integer)
|
|
+ ", _list: "
|
|
+ str(self._list)
|
|
+ "}"
|
|
)
|
|
|
|
def isInteger(self):
|
|
return self._integer is not None
|
|
|
|
def getInteger(self):
|
|
return self._integer
|
|
|
|
def setInteger(self, i):
|
|
self._integer = i
|
|
|
|
def getList(self):
|
|
return self._list
|
|
|
|
def add(self, ni):
|
|
self._list.append(ni)
|
|
self._integer = None
|
|
|
|
def _nested_integer_to_token(self):
|
|
if self.isInteger():
|
|
return self._integer
|
|
else:
|
|
return [
|
|
nested_integer._nested_integer_to_token()
|
|
for nested_integer in self._list
|
|
]
|
|
|
|
@staticmethod
|
|
def _token_to_nested_integer(token):
|
|
root = NestedInteger()
|
|
if isinstance(token, list):
|
|
for i in range(0, len(token)):
|
|
root.add(NestedInteger._token_to_nested_integer(token[i]))
|
|
elif isinstance(token, int):
|
|
root.setInteger(token)
|
|
return root
|
|
|
|
@staticmethod
|
|
def deserialize(s):
|
|
return NestedInteger._token_to_nested_integer(json.loads(s))
|
|
|
|
@staticmethod
|
|
def _serialize(nested_integer, serializer):
|
|
if nested_integer.isInteger():
|
|
return serializer._serialize(nested_integer.getInteger(), "integer")
|
|
else:
|
|
return serializer._serialize(
|
|
nested_integer.getList(), "NestedInteger[]"
|
|
)
|
|
|
|
# TODO: depreciated. remove once new serializer has been deployed.
|
|
@staticmethod
|
|
def serialize(nested_integer, serializer):
|
|
if nested_integer.isInteger():
|
|
return serializer.serialize(nested_integer.getInteger())
|
|
else:
|
|
return serializer.serialize(nested_integer.getList())
|
|
|