From 068c77f9204d3502d3363a9709ee19eec8e054aa Mon Sep 17 00:00:00 2001 From: olijeffers0n <69084614+olijeffers0n@users.noreply.github.com> Date: Thu, 28 Dec 2023 10:37:31 +0000 Subject: [PATCH] Add #serialize to structs --- rustplus/api/structures/rust_chat_message.py | 3 ++- rustplus/api/structures/rust_contents.py | 4 ++-- rustplus/api/structures/rust_entity_info.py | 6 +++--- rustplus/api/structures/rust_info.py | 3 ++- rustplus/api/structures/rust_item.py | 3 ++- rustplus/api/structures/rust_map.py | 6 +++--- rustplus/api/structures/rust_marker.py | 8 ++++---- rustplus/api/structures/rust_team_info.py | 8 ++++---- rustplus/api/structures/rust_time.py | 5 ++++- rustplus/api/structures/serialization.py | 17 +++++++++++++++++ 10 files changed, 43 insertions(+), 20 deletions(-) create mode 100644 rustplus/api/structures/serialization.py diff --git a/rustplus/api/structures/rust_chat_message.py b/rustplus/api/structures/rust_chat_message.py index a6ba71b..bc3cef5 100644 --- a/rustplus/api/structures/rust_chat_message.py +++ b/rustplus/api/structures/rust_chat_message.py @@ -1,7 +1,8 @@ from ..remote.rustplus_proto import AppTeamMessage +from .serialization import Serializable -class RustChatMessage: +class RustChatMessage(Serializable): def __init__(self, data: AppTeamMessage): self._steam_id: int = data.steam_id self._name: str = data.name diff --git a/rustplus/api/structures/rust_contents.py b/rustplus/api/structures/rust_contents.py index 8f49005..6db2ccf 100644 --- a/rustplus/api/structures/rust_contents.py +++ b/rustplus/api/structures/rust_contents.py @@ -1,10 +1,10 @@ from datetime import timedelta from typing import List - +from .serialization import Serializable from .rust_item import RustItem -class RustContents: +class RustContents(Serializable): def __init__(self, protection_time, has_protection, contents) -> None: self._protection_time: timedelta = protection_time self._has_protection: bool = has_protection diff --git a/rustplus/api/structures/rust_entity_info.py b/rustplus/api/structures/rust_entity_info.py index d78aa78..563f55e 100644 --- a/rustplus/api/structures/rust_entity_info.py +++ b/rustplus/api/structures/rust_entity_info.py @@ -1,9 +1,9 @@ from typing import List - +from .serialization import Serializable from ..remote import AppEntityInfo, AppEntityPayloadItem -class RustEntityInfoItem: +class RustEntityInfoItem(Serializable): def __init__(self, data: AppEntityPayloadItem) -> None: self._item_id: int = data.item_id self._quantity: int = data.quantity @@ -29,7 +29,7 @@ def __str__(self) -> str: ) -class RustEntityInfo: +class RustEntityInfo(Serializable): def __init__(self, data: AppEntityInfo) -> None: self._type: int = data.type self._value: bool = data.payload.value diff --git a/rustplus/api/structures/rust_info.py b/rustplus/api/structures/rust_info.py index 88eb128..53d45de 100644 --- a/rustplus/api/structures/rust_info.py +++ b/rustplus/api/structures/rust_info.py @@ -1,7 +1,8 @@ from ..remote.rustplus_proto import AppInfo +from .serialization import Serializable -class RustInfo: +class RustInfo(Serializable): def __init__(self, data: AppInfo) -> None: self._name: str = data.name self._url: str = data.url diff --git a/rustplus/api/structures/rust_item.py b/rustplus/api/structures/rust_item.py index 6c5bb05..2589856 100644 --- a/rustplus/api/structures/rust_item.py +++ b/rustplus/api/structures/rust_item.py @@ -1,7 +1,8 @@ from typing import Union +from .serialization import Serializable -class RustItem: +class RustItem(Serializable): def __init__( self, name: str, item_id: Union[str, int], quantity: int, is_blueprint: bool ) -> None: diff --git a/rustplus/api/structures/rust_map.py b/rustplus/api/structures/rust_map.py index 1c780f0..c7ed7ff 100644 --- a/rustplus/api/structures/rust_map.py +++ b/rustplus/api/structures/rust_map.py @@ -1,9 +1,9 @@ from typing import List - +from .serialization import Serializable from ..remote.rustplus_proto import AppMap -class RustMonument: +class RustMonument(Serializable): def __init__(self, token, x, y) -> None: self._token: str = token self._x: float = x @@ -27,7 +27,7 @@ def __str__(self) -> str: ) -class RustMap: +class RustMap(Serializable): def __init__(self, data: AppMap) -> None: self._width: int = data.width self._height: int = data.height diff --git a/rustplus/api/structures/rust_marker.py b/rustplus/api/structures/rust_marker.py index cc1cc1d..8489e64 100644 --- a/rustplus/api/structures/rust_marker.py +++ b/rustplus/api/structures/rust_marker.py @@ -1,9 +1,9 @@ from typing import List - +from .serialization import Serializable from ..remote.rustplus_proto import Vector4, AppMarkerSellOrder, AppMarker -class RustColour: +class RustColour(Serializable): def __init__(self, data: Vector4) -> None: self._x: float = data.x self._y: float = data.y @@ -32,7 +32,7 @@ def __str__(self) -> str: ) -class RustSellOrder: +class RustSellOrder(Serializable): def __init__(self, data: AppMarkerSellOrder) -> None: self._item_id: int = data.item_id self._quantity: int = data.quantity @@ -84,7 +84,7 @@ def __str__(self) -> str: ) -class RustMarker: +class RustMarker(Serializable): PlayerMarker = 1 ExplosionMarker = 2 VendingMachineMarker = 3 diff --git a/rustplus/api/structures/rust_team_info.py b/rustplus/api/structures/rust_team_info.py index 5a6b241..7669dd5 100644 --- a/rustplus/api/structures/rust_team_info.py +++ b/rustplus/api/structures/rust_team_info.py @@ -1,9 +1,9 @@ from typing import List - +from .serialization import Serializable from ..remote.rustplus_proto import AppTeamInfoMember, AppTeamInfoNote, AppTeamInfo -class RustTeamMember: +class RustTeamMember(Serializable): def __init__(self, data: AppTeamInfoMember) -> None: self._steam_id: int = data.steam_id self._name: str = data.name @@ -59,7 +59,7 @@ def __str__(self) -> str: ) -class RustTeamNote: +class RustTeamNote(Serializable): def __init__(self, data: AppTeamInfoNote) -> None: self._type: int = data.type self._x: float = data.x @@ -98,7 +98,7 @@ def __str__(self) -> str: ) -class RustTeamInfo: +class RustTeamInfo(Serializable): def __init__(self, data: AppTeamInfo) -> None: self._leader_steam_id: int = data.leader_steam_id self._members = [RustTeamMember(member) for member in data.members] diff --git a/rustplus/api/structures/rust_time.py b/rustplus/api/structures/rust_time.py index 9c2bd76..fe7b314 100644 --- a/rustplus/api/structures/rust_time.py +++ b/rustplus/api/structures/rust_time.py @@ -1,4 +1,7 @@ -class RustTime: +from .serialization import Serializable + + +class RustTime(Serializable): def __init__(self, day_length, sunrise, sunset, time, raw_time, time_scale) -> None: self._day_length: float = day_length self._sunrise: str = sunrise diff --git a/rustplus/api/structures/serialization.py b/rustplus/api/structures/serialization.py new file mode 100644 index 0000000..cd26ed2 --- /dev/null +++ b/rustplus/api/structures/serialization.py @@ -0,0 +1,17 @@ +from collections.abc import Sequence + + +class Serializable: + + def serialize(self): + data = {} + for k, v in self.__dict__.items(): + key = k if k[0] != "_" else k[1:] + if isinstance(v, Serializable): + data[key] = v.serialize() + elif isinstance(v, Sequence) and all(isinstance(element, Serializable) for element in v): + data[key] = [e.serialize() for e in v] + else: + data[key] = str(v) + + return data