GBA-8-19/Features/Protocols/AnyFeature.swift
bluesea 2d62f40b7c s
2024-06-14 18:16:51 +08:00

39 lines
805 B
Swift

//
// AnyFeature.swift
// HthikFeatures
//
// Created by Hthik on 4/12/23.
// Copyright © 2024 Hthik
//
import SwiftUI
@dynamicMemberLookup
public protocol AnyFeature<Options>: ObservableObject, Identifiable
{
associatedtype Options = EmptyOptions
var name: LocalizedStringKey { get }
var description: LocalizedStringKey? { get }
var key: String { get }
var settingsKey: SettingsName { get }
var isEnabled: Bool { get set }
var allOptions: [any AnyOption] { get }
subscript<T>(dynamicMember keyPath: KeyPath<Options, T>) -> T { get set }
}
extension AnyFeature
{
public var id: String { self.key }
}
// Don't expose `key` setter via AnyFeature protocol.
internal protocol _AnyFeature: AnyFeature
{
var key: String { get set }
}