Skip to content
Snippets Groups Projects
Message.swift 1.64 KiB
Newer Older
Bruno Muniz's avatar
Bruno Muniz committed
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 {}