# matrix-appservice-kakaotalk - A Matrix-KakaoTalk puppeting bridge. # Copyright (C) 2022 Tulir Asokan, Andrew Ferrazzutti # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from typing import NewType, Union from attr import dataclass from mautrix.types import SerializableAttrs, JSON, deserializer from ..bson import Long from ..channel.channel_info import ChannelLoginData, NormalChannelData from ..openlink.open_channel_info import OpenChannelData ChannelLoginDataItem = NewType("ChannelLoginDataItem", ChannelLoginData[Union[NormalChannelData, OpenChannelData]]) @deserializer(ChannelLoginDataItem) def deserialize_channel_login_data_item(data: JSON) -> ChannelLoginDataItem: channel_data = data["channel"] if "linkId" in channel_data: data["channel"] = OpenChannelData.deserialize(channel_data) else: data["channel"] = NormalChannelData.deserialize(channel_data) return ChannelLoginData.deserialize(data) setattr(ChannelLoginDataItem, "deserialize", deserialize_channel_login_data_item) @dataclass class LoginResult(SerializableAttrs): """Return value of TalkClient.login""" channelList: list[ChannelLoginDataItem] userId: Long lastChannelId: Long lastTokenId: Long mcmRevision: int removedChannelIdList: list[Long] revision: int revisionInfo: str minLogId: Long # TODO Consider catching SerializerError for channelList entries __all__ = [ "LoginResult", ]