Path: blob/main/SignalServiceKit/Messages/Interactions/GroupUpdateSource.swift
1 views
//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
public import LibSignalClient
public indirect enum GroupUpdateSource: Equatable {
/// No source found.
case unknown
/// Source known to be the local user. The original source
/// cannot itself be localUser or unknown.
case localUser(originalSource: GroupUpdateSource)
/// Legacy update (pre-GV2) with only an e164.
case legacyE164(E164)
/// Standard case. Most updates come from an ACI.
case aci(Aci)
/// A user who was invited by PNI rejected the invite.
///
/// This case will refer to the ``GroupsProtoGroupChangeActionsDeletePendingMemberAction``,
/// when the pending member in question is identified by a PNI.
///
/// This is, at the time of writing, the only case in which the best
/// identifier we have for the group update source is a PNI.
case rejectedInviteToPni(Pni)
/// If future updates introduce additional cases in which a PNI is the
/// best/only identifier for the group update source, add them here. These
/// cases are rare exceptions to the rule, so we prefer to enumerate them so
/// as to make it easier for callers to understand exactly when they might
/// be dealing with a PNI.
public func serviceIdUnsafeForLocalUserComparison() -> ServiceId? {
switch self {
case .unknown:
return nil
case .legacyE164:
return nil
case .aci(let aci):
return aci
case .rejectedInviteToPni(let pni):
return pni
case .localUser(let originalSource):
return originalSource.serviceIdUnsafeForLocalUserComparison()
}
}
}