// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved. import Foundation // MARK: - FeatureStorage public class FeatureStorage {} // MARK: - FeatureConfig public class FeatureConfig: FeatureStorage { public let identifier: String public let groupIdentifier: String? public let createInstance: (Dependencies) -> Feature /// `fileprivate` to hide when accessing via `dependencies[feature: ]` fileprivate init( identifier: String, groupIdentifier: String?, defaultOption: T, automaticChangeBehaviour: Feature.ChangeBehaviour? ) { self.identifier = identifier self.groupIdentifier = groupIdentifier self.createInstance = { _ in Feature( identifier: identifier, options: Array(T.allCases), defaultOption: defaultOption, automaticChangeBehaviour: automaticChangeBehaviour ) } } } // MARK: - Creation public extension Dependencies { static func create( identifier: String, groupIdentifier: String? = nil, defaultOption: T = T.defaultOption, automaticChangeBehaviour: Feature.ChangeBehaviour? = nil ) -> FeatureConfig { return FeatureConfig( identifier: identifier, groupIdentifier: groupIdentifier, defaultOption: defaultOption, automaticChangeBehaviour: automaticChangeBehaviour ) } }