32 lines
931 B
Swift
32 lines
931 B
Swift
//
|
|
// Copyright 2021 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import Foundation
|
|
|
|
enum NetworkInterface: UInt, Equatable, CaseIterable {
|
|
case cellular = 0
|
|
case wifi
|
|
|
|
var singleItemSet: NetworkInterfaceSet {
|
|
NetworkInterfaceSet(rawValue: 1 << rawValue)
|
|
}
|
|
}
|
|
|
|
public struct NetworkInterfaceSet: OptionSet, Equatable {
|
|
public let rawValue: UInt
|
|
public init(rawValue: UInt) {
|
|
self.rawValue = rawValue
|
|
}
|
|
|
|
public static let none: NetworkInterfaceSet = []
|
|
public static let cellular = NetworkInterface.cellular.singleItemSet
|
|
public static let wifi = NetworkInterface.wifi.singleItemSet
|
|
public static let wifiAndCellular: NetworkInterfaceSet = [.cellular, .wifi]
|
|
|
|
public var inverted: NetworkInterfaceSet {
|
|
let invertedRawValue = rawValue ^ Self.wifiAndCellular.rawValue
|
|
return NetworkInterfaceSet(rawValue: invertedRawValue)
|
|
}
|
|
}
|