import Foundation import DifferenceKit public struct Message: Codable, Equatable, Hashable { public enum Request { case sending case withUniqueId(Data) case withId(Int64) case sendingAttachment case withContact(Data) case unreadsFromContactId(Data) case latestOnesFromContactIds([Data]) } public enum Status: Int64, Codable { case read case sent case sending case sendingAttachment case receivingAttachment case received case failedToSend case timedOut } public var id: Int64? public var unread: Bool public let sender: Data public var roundURL: String? public var report: Data? public var status: Status public let receiver: Data public var timestamp: Int public var uniqueId: Data? public var payload: Payload public static var databaseTableName: String { "messages" } public init ( sender: Data, receiver: Data, payload: Payload, unread: Bool, timestamp: Int, uniqueId: Data?, status: Status, roundURL: String? = nil ) { self.sender = sender self.unread = unread self.status = status self.payload = payload self.receiver = receiver self.uniqueId = uniqueId self.timestamp = timestamp self.roundURL = roundURL } } public extension Message.Status { var canReply: Bool { switch self { case .sent, .received, .read: return true default: return false } } } extension Message: Differentiable {}