Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
signalapp
GitHub Repository: signalapp/Signal-iOS
Path: blob/main/SignalServiceKit/Storage/MediaGallery/AttachmentReferenceId.swift
1 views
//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//

import Foundation

/// Uniquely and stably identifies an ``AttachmentReference``
public struct AttachmentReferenceId: Equatable, Hashable {
    public let ownerId: AttachmentReference.Owner.ID

    /// Body media attachments on the same message share an owner id.
    ///
    /// For those body media attachments, order disambiguates,
    /// which makes this identifier object as a whole unique.
    ///
    /// In other owner cases this order value is nil.
    public let orderInMessage: UInt32?
}

extension AttachmentReference {

    public var referenceId: AttachmentReferenceId {
        let orderInMessage: UInt32?
        switch owner {
        case .message(.bodyAttachment(let metadata)):
            orderInMessage = metadata.orderInMessage
        default:
            orderInMessage = nil
        }
        return .init(ownerId: owner.id, orderInMessage: orderInMessage)
    }
}