Swiftgram/submodules/Postbox/Sources/PeerChatInterfaceState.swift
2021-08-03 12:23:13 +02:00

76 lines
2.8 KiB
Swift

import Foundation
/*public protocol PeerChatListEmbeddedInterfaceState: Codable {
var timestamp: Int32 { get }
func isEqual(to: PeerChatListEmbeddedInterfaceState) -> Bool
}*/
public final class StoredPeerChatInterfaceState: Codable, Equatable {
private enum CodingKeys: CodingKey {
case overrideChatTimestamp
case historyScrollMessageIndex
case associatedMessageIds
case data
}
public let overrideChatTimestamp: Int32?
public let historyScrollMessageIndex: MessageIndex?
public let associatedMessageIds: [MessageId]
public let data: Data?
public init(
overrideChatTimestamp: Int32?,
historyScrollMessageIndex: MessageIndex?,
associatedMessageIds: [MessageId],
data: Data?
) {
self.overrideChatTimestamp = overrideChatTimestamp
self.historyScrollMessageIndex = historyScrollMessageIndex
self.associatedMessageIds = associatedMessageIds
self.data = data
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.overrideChatTimestamp = try? container.decodeIfPresent(Int32.self, forKey: .overrideChatTimestamp)
self.historyScrollMessageIndex = try? container.decodeIfPresent(MessageIndex.self, forKey: .historyScrollMessageIndex)
self.associatedMessageIds = try container.decode([MessageId].self, forKey: .associatedMessageIds)
self.data = try? container.decodeIfPresent(Data.self, forKey: .data)
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encodeIfPresent(self.overrideChatTimestamp, forKey: .overrideChatTimestamp)
try container.encodeIfPresent(self.historyScrollMessageIndex, forKey: .historyScrollMessageIndex)
try container.encodeIfPresent(self.associatedMessageIds, forKey: .associatedMessageIds)
try container.encodeIfPresent(self.data, forKey: .data)
}
public static func ==(lhs: StoredPeerChatInterfaceState, rhs: StoredPeerChatInterfaceState) -> Bool {
if lhs.overrideChatTimestamp != rhs.overrideChatTimestamp {
return false
}
if lhs.historyScrollMessageIndex != rhs.historyScrollMessageIndex {
return false
}
if lhs.associatedMessageIds != rhs.associatedMessageIds {
return false
}
if lhs.data != rhs.data {
return false
}
return true
}
}
/*public protocol PeerChatInterfaceState: PostboxCoding {
var chatListEmbeddedState: PeerChatListEmbeddedInterfaceState? { get }
var historyScrollMessageIndex: MessageIndex? { get }
var associatedMessageIds: [MessageId] { get }
func isEqual(to: PeerChatInterfaceState) -> Bool
}*/