zashi-ios-wallet-private/secant/Models/WalletConfig.swift

43 lines
1.1 KiB
Swift

//
// WalletConfig.swift
// secant
//
// Created by Michal Fousek on 23.02.2023.
//
enum FeatureFlag: String, CaseIterable, Codable {
// These two flags should stay here because those are used in tests. It's not super nice but there is probably no other way.
case testFlag1
case testFlag2
case onboardingFlow
case testBackupPhraseFlow
case showFiatConversion
var enabledByDefault: Bool {
switch self {
case .testFlag1, .testFlag2: return false
case .onboardingFlow: return false
case .testBackupPhraseFlow: return false
case .showFiatConversion: return false
}
}
}
struct WalletConfig: Equatable {
typealias RawFlags = [FeatureFlag: Bool]
let flags: RawFlags
func isEnabled(_ featureFlag: FeatureFlag) -> Bool {
return flags[featureFlag, default: false]
}
static var `default`: WalletConfig = {
let defaultSettings = FeatureFlag.allCases
.filter { $0 != .testFlag1 && $0 != .testFlag2 }
.map { ($0, $0.enabledByDefault) }
return WalletConfig(flags: Dictionary(uniqueKeysWithValues: defaultSettings))
}()
}