| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- //
- // StatefulPluggable.swift
- // LoopKit
- //
- // Created by Nathaniel Hamming on 2023-09-05.
- // Copyright © 2023 LoopKit Authors. All rights reserved.
- //
- import Foundation
- public protocol StatefulPlugin {
- var pluginType: StatefulPluggable.Type? { get }
- }
- public protocol StatefulPluggableProvider {
- /// The stateful plugin with the specified identifier.
- ///
- /// - Parameters:
- /// - identifier: The identifier of the stateful plugin
- /// - Returns: Either a stateful plugin with matching identifier or nil.
- func statefulPlugin(withIdentifier identifier: String) -> StatefulPluggable?
- }
- public protocol StatefulPluggableDelegate: AnyObject {
- /// Informs the delegate that the state of the specified plugin was updated and the delegate should persist the plugin. May
- /// be invoked prior to the plugin completing setup.
- ///
- /// - Parameters:
- /// - plugin: The plugin that updated state.
- func pluginDidUpdateState(_ plugin: StatefulPluggable)
- /// Informs the delegate that the plugin wants deletion.
- ///
- /// - Parameters:
- /// - plugin: The plugin that wants deletion.
- func pluginWantsDeletion(_ plugin: StatefulPluggable)
- }
- public protocol StatefulPluggable: Pluggable {
- typealias RawStateValue = [String: Any]
- /// The delegate to notify of plugin updates.
- var stateDelegate: StatefulPluggableDelegate? { get set }
- /// Initializes the plugin with the previously-serialized state.
- ///
- /// - Parameters:
- /// - rawState: The previously-serialized state of the plugin.
- init?(rawState: RawStateValue)
- /// The current, serializable state of the plugin.
- var rawState: RawStateValue { get }
- /// Is the plugin onboarded and ready for use?
- var isOnboarded: Bool { get }
- }
|