| 29 | } |
| 30 | |
| 31 | PeerId DeserializePeerId(quint64 serialized) { |
| 32 | const auto flag = (UserId::kReservedBit << 48); |
| 33 | const auto legacy = !(serialized & (UserId::kReservedBit << 48)); |
| 34 | if (!legacy) { |
| 35 | return PeerId(serialized & (~flag)); |
| 36 | } |
| 37 | constexpr auto PeerIdMask = uint64(0xFFFFFFFFULL); |
| 38 | constexpr auto PeerIdTypeMask = uint64(0xF00000000ULL); |
| 39 | constexpr auto PeerIdUserShift = uint64(0x000000000ULL); |
| 40 | constexpr auto PeerIdChatShift = uint64(0x100000000ULL); |
| 41 | constexpr auto PeerIdChannelShift = uint64(0x200000000ULL); |
| 42 | constexpr auto PeerIdFakeShift = uint64(0xF00000000ULL); |
| 43 | return ((serialized & PeerIdTypeMask) == PeerIdUserShift) |
| 44 | ? peerFromUser(UserId(serialized & PeerIdMask)) |
| 45 | : ((serialized & PeerIdTypeMask) == PeerIdChatShift) |
| 46 | ? peerFromChat(ChatId(serialized & PeerIdMask)) |
| 47 | : ((serialized & PeerIdTypeMask) == PeerIdChannelShift) |
| 48 | ? peerFromChannel(ChannelId(serialized & PeerIdMask)) |
| 49 | : ((serialized & PeerIdTypeMask) == PeerIdFakeShift) |
| 50 | ? PeerId(FakeChatId(serialized & PeerIdMask)) |
| 51 | : PeerId(0); |
| 52 | } |
| 53 | |
| 54 | quint64 SerializePeerId(PeerId id) { |
| 55 | Expects(!(id.value & (UserId::kReservedBit << 48))); |
no test coverage detected