TM-SGNL-iOS/SignalServiceKit/Account/PreKeys/PreKeyTarget.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

60 lines
1.8 KiB
Swift

//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
public enum PreKey {
static let logger = PrefixedLogger(prefix: "[PreKey]")
}
extension PreKey {
// Needs to remain in sync with 'Target' below
public enum SingleTarget: Int, Equatable, CaseIterable {
case signedPreKey = 1
case oneTimePreKey = 2
case oneTimePqPreKey = 4
case lastResortPqPreKey = 8
// next raw value: 16 (1 << 4)
public var asTarget: Target {
return Target(rawValue: rawValue)
}
}
public struct Target: OptionSet, CustomDebugStringConvertible {
public let rawValue: Int
public init(rawValue: Int) {
self.rawValue = rawValue
}
static let signedPreKey = Target(rawValue: SingleTarget.signedPreKey.rawValue)
static let oneTimePreKey = Target(rawValue: SingleTarget.oneTimePreKey.rawValue)
static let oneTimePqPreKey = Target(rawValue: SingleTarget.oneTimePqPreKey.rawValue)
static let lastResortPqPreKey = Target(rawValue: SingleTarget.lastResortPqPreKey.rawValue)
public mutating func insert(target: SingleTarget) {
self.insert(target.asTarget)
}
public func contains(target: SingleTarget) -> Bool {
self.contains(target.asTarget)
}
public var targets: [SingleTarget] {
return SingleTarget.allCases.compactMap {
return self.contains(target: $0) ? $0 : nil
}
}
static var all: Target {
SingleTarget.allCases.reduce(into: []) { $0.insert(target: $1) }
}
public var debugDescription: String {
return "[" + targets.map { "\($0)" }.joined(separator: ", ") + "]"
}
}
}