diff --git a/.agents/interfaces/ios/Resettable.swiftinterface b/.agents/interfaces/ios/Resettable.swiftinterface new file mode 100644 index 0000000..9d86916 --- /dev/null +++ b/.agents/interfaces/ios/Resettable.swiftinterface @@ -0,0 +1,296 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-ios13.0-simulator -enable-objc-interop -swift-version 6 -O -module-name Resettable -package-name swift_resettable +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import KeyPathMapping +import KeyPathsExtensions +import Swift +import SwiftMarkerProtocols +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +extension Resettable.Resettable where Base : Swift.Collection { + public var collection: Resettable.Resettable.WritableKeyPathContainer { + get + } +} +extension Resettable.Resettable.WritableKeyPathContainer where Value : Swift.Collection { + @discardableResult + public func swapAt(_ idx1: Swift.Array.Index, _ idx2: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] + @discardableResult + public func remove(at idx: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] + @discardableResult + public func insert(_ element: Swift.Array.Element, at idx: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] + @discardableResult + public func append(_ element: Swift.Array.Element, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] +} +extension Resettable.Resettable { + public enum OperationBehavior { + case `default` + case amend + case insert + case inject + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: Resettable.Resettable.OperationBehavior, _ b: Resettable.Resettable.OperationBehavior) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + } +} +@propertyWrapper @dynamicMemberLookup public class Resettable { + @available(*, deprecated, renamed: "Base") + public typealias Object = Base + convenience public init(wrappedValue: Base) + public init(_ base: Base) + @usableFromInline + internal var base: Base + @inlinable public var wrappedValue: Base { + _read { yield base } + } + @inlinable public var projectedValue: Resettable.Resettable { + get { self } + } + @discardableResult + public func undo() -> Resettable.Resettable + @discardableResult + public func redo() -> Resettable.Resettable + @discardableResult + @inlinable public func undo(_ count: Swift.Int) -> Resettable.Resettable { + for _ in 0.. Resettable.Resettable { + for _ in 0.. Resettable.Resettable + @discardableResult + public func redoAll() -> Resettable.Resettable + @discardableResult + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, _ keyPath: Swift.WritableKeyPath, using action: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable + @discardableResult + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, _ keyPath: Swift.WritableKeyPath, using action: @escaping (inout Value) -> Swift.Void, undo: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable + @discardableResult + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, using action: @escaping (inout Base) -> Swift.Void, undo: @escaping (inout Base) -> Swift.Void) -> Resettable.Resettable + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { + get { + WritableKeyPathContainer( + resettable: self, + keyPath: keyPath + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { + get { + KeyPathContainer( + resettable: self, + keyPath: keyPath + ) + } + } + @objc deinit +} +extension Resettable.Resettable { + @dynamicMemberLookup public struct KeyPathContainer { + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.KeyPath + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.KeyPath) + @inlinable public subscript(dynamicMember keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { + get { + WritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { + get { + KeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } + @dynamicMemberLookup public struct WritableKeyPathContainer { + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.WritableKeyPath + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.WritableKeyPath) + @discardableResult + @inlinable public func callAsFunction(_ value: Value, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable { + return self.callAsFunction(operation) { $0 = value } + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable { + return resettable._modify( + operation: operation, + keyPath, + using: action + ) + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Value) -> Swift.Void, undo: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable { + return resettable._modify( + operation: operation, + keyPath, + using: action, + undo: undo + ) + } + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { + get { + WritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { + get { + KeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } + @dynamicMemberLookup public struct IfLetKeyPathContainer { + public typealias Value = Wrapped? + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.KeyPath.IfLetKeyPathContainer.Value> + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.KeyPath.IfLetKeyPathContainer.Value>) + @inlinable public subscript(dynamicMember keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer { + get { + IfLetWritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer { + get { + IfLetKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } + @dynamicMemberLookup public struct IfLetWritableKeyPathContainer { + public typealias Value = Wrapped? + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.WritableKeyPath.IfLetWritableKeyPathContainer.Value> + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.WritableKeyPath.IfLetWritableKeyPathContainer.Value>) + @discardableResult + @inlinable public func callAsFunction(_ value: Wrapped, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable { + guard resettable.wrappedValue[keyPath: keyPath] != nil else { return resettable } + return self.callAsFunction(operation) { $0 = value } + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Wrapped) -> Swift.Void) -> Resettable.Resettable { + guard let value = resettable.wrappedValue[keyPath: keyPath] else { return resettable } + return resettable._modify( + operation: operation, + keyPath.unwrapped(with: value), + using: action + ) + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Wrapped) -> Swift.Void, undo: @escaping (inout Wrapped) -> Swift.Void) -> Resettable.Resettable { + guard let value = resettable.wrappedValue[keyPath: keyPath] else { return resettable } + return resettable._modify( + operation: operation, + keyPath.unwrapped(with: value), + using: action, + undo: undo + ) + } + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer { + get { + IfLetWritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer { + get { + IfLetKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } +} +extension Resettable.Resettable where Base : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { + get + } +} +extension Resettable.Resettable { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.WritableKeyPathContainer where Value : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { + get + } + public func ifNil(_ value: Value, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable +} +extension Resettable.Resettable.KeyPathContainer where Value : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetKeyPathContainer { + get + } +} +extension Resettable.Resettable.IfLetWritableKeyPathContainer where Wrapped : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { + get + } +} +extension Resettable.Resettable.IfLetKeyPathContainer where Wrapped : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetKeyPathContainer { + get + } +} +extension Resettable.Resettable.WritableKeyPathContainer { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.KeyPathContainer { + public func ifLet(_ keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.IfLetWritableKeyPathContainer { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.IfLetKeyPathContainer { + public func ifLet(_ keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +@usableFromInline +@discardableResult +internal func modification(of object: T, with action: (inout T) -> Swift.Void) -> T +extension Resettable.Resettable : Swift.Identifiable where Base : Swift.Identifiable { + @inlinable public var id: Base.ID { + get { wrappedValue.id } + } + public typealias ID = Base.ID +} +extension Resettable.Resettable.OperationBehavior : Swift.Equatable {} +extension Resettable.Resettable.OperationBehavior : Swift.Hashable {} diff --git a/.agents/interfaces/ios/_ResettableDebugging.swiftinterface b/.agents/interfaces/ios/_ResettableDebugging.swiftinterface new file mode 100644 index 0000000..06c3a47 --- /dev/null +++ b/.agents/interfaces/ios/_ResettableDebugging.swiftinterface @@ -0,0 +1,29 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-ios13.0-simulator -enable-objc-interop -swift-version 6 -O -module-name _ResettableDebugging -package-name swift_resettable +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import CustomDump +@_exported import Resettable +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +extension Resettable.Resettable { + @available(*, deprecated, message: "Might be removed due to lack of Value type constraint, which makes the behavior unstable, consider re-implementing this feature locally if needed") + public struct ValuesDump { + @usableFromInline + internal init(items: [Resettable.Resettable.Object], currentIndex: Swift.Int) + public let items: [Resettable.Resettable.Object] + public let currentIndex: Swift.Int + } +} +extension Resettable.Resettable { + @available(*, deprecated, message: "Might be removed due to lack of Value type constraint, which makes the behavior unstable, consider re-implementing this feature locally if needed") + public func valuesDump() -> Resettable.Resettable.ValuesDump + @inlinable public func dump() -> Swift.String { + var buffer = "" + self.dump(to: &buffer) + return buffer + } + public func dump(to stream: inout TargetStream) where TargetStream : Swift.TextOutputStream +} diff --git a/.agents/interfaces/macos/Resettable.swiftinterface b/.agents/interfaces/macos/Resettable.swiftinterface index 3a489b8..d8ee715 100644 --- a/.agents/interfaces/macos/Resettable.swiftinterface +++ b/.agents/interfaces/macos/Resettable.swiftinterface @@ -1,7 +1,7 @@ // swift-interface-format-version: 1.0 -// swift-compiler-version: Apple Swift version 6.4 (swiftlang-6.4.0.25.4 clang-2100.3.25.1) -// swift-module-flags: -target arm64-apple-macos12.0 -enable-objc-interop -language-mode 6 -O -enable-experimental-feature DebugDescriptionMacro -module-name Resettable -package-name swift_resettable -// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.4 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-macosx10.15 -enable-objc-interop -swift-version 6 -O -module-name Resettable -package-name swift_resettable +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 import KeyPathMapping import KeyPathsExtensions import Swift @@ -9,30 +9,30 @@ import SwiftMarkerProtocols import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -extension Resettable::Resettable where Base : Swift::Collection { - public var collection: Resettable::Resettable.Resettable::WritableKeyPathContainer { +extension Resettable.Resettable where Base : Swift.Collection { + public var collection: Resettable.Resettable.WritableKeyPathContainer { get } } -extension Resettable::Resettable.Resettable::WritableKeyPathContainer where Value : Swift::Collection { +extension Resettable.Resettable.WritableKeyPathContainer where Value : Swift.Collection { @discardableResult - public func swapAt(_ idx1: Swift::Array.Swift::Index, _ idx2: Swift::Array.Swift::Index, operation: Resettable::Resettable.Resettable::OperationBehavior = .default) -> Resettable::Resettable where Value == [T] + public func swapAt(_ idx1: Swift.Array.Index, _ idx2: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] @discardableResult - public func remove(at idx: Swift::Array.Swift::Index, operation: Resettable::Resettable.Resettable::OperationBehavior = .default) -> Resettable::Resettable where Value == [T] + public func remove(at idx: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] @discardableResult - public func insert(_ element: Swift::Array.Swift::Element, at idx: Swift::Array.Swift::Index, operation: Resettable::Resettable.Resettable::OperationBehavior = .default) -> Resettable::Resettable where Value == [T] + public func insert(_ element: Swift.Array.Element, at idx: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] @discardableResult - public func append(_ element: Swift::Array.Swift::Element, operation: Resettable::Resettable.Resettable::OperationBehavior = .default) -> Resettable::Resettable where Value == [T] + public func append(_ element: Swift.Array.Element, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] } -extension Resettable::Resettable { +extension Resettable.Resettable { public enum OperationBehavior { case `default` case amend case insert case inject - @_semantics("derived_enum_equals") @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: Resettable::Resettable.Resettable::OperationBehavior, _ b: Resettable::Resettable.Resettable::OperationBehavior) -> Swift::Bool - public func hash(into hasher: inout Swift::Hasher) - public var hashValue: Swift::Int { + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: Resettable.Resettable.OperationBehavior, _ b: Resettable.Resettable.OperationBehavior) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { get } } @@ -47,34 +47,34 @@ extension Resettable::Resettable { @inlinable public var wrappedValue: Base { _read { yield base } } - @inlinable public var projectedValue: Resettable::Resettable { + @inlinable public var projectedValue: Resettable.Resettable { get { self } } @discardableResult - public func undo() -> Resettable::Resettable + public func undo() -> Resettable.Resettable @discardableResult - public func redo() -> Resettable::Resettable + public func redo() -> Resettable.Resettable @discardableResult - @inlinable public func undo(_ count: Swift::Int) -> Resettable::Resettable { + @inlinable public func undo(_ count: Swift.Int) -> Resettable.Resettable { for _ in 0.. Resettable::Resettable { + @inlinable public func redo(_ count: Swift.Int) -> Resettable.Resettable { for _ in 0.. Resettable::Resettable + public func undoAll() -> Resettable.Resettable @discardableResult - public func redoAll() -> Resettable::Resettable + public func redoAll() -> Resettable.Resettable @discardableResult - public func _modify(operation: Resettable::Resettable.Resettable::OperationBehavior = .default, _ keyPath: Swift::WritableKeyPath, using action: @escaping (inout Value) -> Swift::Void) -> Resettable::Resettable + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, _ keyPath: Swift.WritableKeyPath, using action: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable @discardableResult - public func _modify(operation: Resettable::Resettable.Resettable::OperationBehavior = .default, _ keyPath: Swift::WritableKeyPath, using action: @escaping (inout Value) -> Swift::Void, undo: @escaping (inout Value) -> Swift::Void) -> Resettable::Resettable + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, _ keyPath: Swift.WritableKeyPath, using action: @escaping (inout Value) -> Swift.Void, undo: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable @discardableResult - public func _modify(operation: Resettable::Resettable.Resettable::OperationBehavior = .default, using action: @escaping (inout Base) -> Swift::Void, undo: @escaping (inout Base) -> Swift::Void) -> Resettable::Resettable - @inlinable public subscript(dynamicMember keyPath: Swift::WritableKeyPath) -> Resettable::Resettable.Resettable::WritableKeyPathContainer { + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, using action: @escaping (inout Base) -> Swift.Void, undo: @escaping (inout Base) -> Swift.Void) -> Resettable.Resettable + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { get { WritableKeyPathContainer( resettable: self, @@ -82,7 +82,7 @@ extension Resettable::Resettable { ) } } - @inlinable public subscript(dynamicMember keyPath: Swift::KeyPath) -> Resettable::Resettable.Resettable::KeyPathContainer { + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { get { KeyPathContainer( resettable: self, @@ -92,15 +92,15 @@ extension Resettable::Resettable { } @objc deinit } -extension Resettable::Resettable { +extension Resettable.Resettable { @dynamicMemberLookup public struct KeyPathContainer { @usableFromInline - internal let resettable: Resettable::Resettable + internal let resettable: Resettable.Resettable @usableFromInline - internal let keyPath: Swift::KeyPath + internal let keyPath: Swift.KeyPath @usableFromInline - internal init(resettable: Resettable::Resettable, keyPath: Swift::KeyPath) - @inlinable public subscript(dynamicMember keyPath: Swift::ReferenceWritableKeyPath) -> Resettable::Resettable.Resettable::WritableKeyPathContainer { + internal init(resettable: Resettable.Resettable, keyPath: Swift.KeyPath) + @inlinable public subscript(dynamicMember keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { get { WritableKeyPathContainer( resettable: resettable, @@ -108,7 +108,7 @@ extension Resettable::Resettable { ) } } - @inlinable public subscript(dynamicMember keyPath: Swift::KeyPath) -> Resettable::Resettable.Resettable::KeyPathContainer { + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { get { KeyPathContainer( resettable: resettable, @@ -119,17 +119,17 @@ extension Resettable::Resettable { } @dynamicMemberLookup public struct WritableKeyPathContainer { @usableFromInline - internal let resettable: Resettable::Resettable + internal let resettable: Resettable.Resettable @usableFromInline - internal let keyPath: Swift::WritableKeyPath + internal let keyPath: Swift.WritableKeyPath @usableFromInline - internal init(resettable: Resettable::Resettable, keyPath: Swift::WritableKeyPath) + internal init(resettable: Resettable.Resettable, keyPath: Swift.WritableKeyPath) @discardableResult - @inlinable public func callAsFunction(_ value: Value, operation: Resettable::Resettable.Resettable::OperationBehavior = .default) -> Resettable::Resettable { + @inlinable public func callAsFunction(_ value: Value, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable { return self.callAsFunction(operation) { $0 = value } } @discardableResult - @inlinable public func callAsFunction(_ operation: Resettable::Resettable.Resettable::OperationBehavior = .default, _ action: @escaping (inout Value) -> Swift::Void) -> Resettable::Resettable { + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable { return resettable._modify( operation: operation, keyPath, @@ -137,7 +137,7 @@ extension Resettable::Resettable { ) } @discardableResult - @inlinable public func callAsFunction(_ operation: Resettable::Resettable.Resettable::OperationBehavior = .default, _ action: @escaping (inout Value) -> Swift::Void, undo: @escaping (inout Value) -> Swift::Void) -> Resettable::Resettable { + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Value) -> Swift.Void, undo: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable { return resettable._modify( operation: operation, keyPath, @@ -145,7 +145,7 @@ extension Resettable::Resettable { undo: undo ) } - @inlinable public subscript(dynamicMember keyPath: Swift::WritableKeyPath) -> Resettable::Resettable.Resettable::WritableKeyPathContainer { + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { get { WritableKeyPathContainer( resettable: resettable, @@ -153,7 +153,7 @@ extension Resettable::Resettable { ) } } - @inlinable public subscript(dynamicMember keyPath: Swift::KeyPath) -> Resettable::Resettable.Resettable::KeyPathContainer { + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { get { KeyPathContainer( resettable: resettable, @@ -165,12 +165,12 @@ extension Resettable::Resettable { @dynamicMemberLookup public struct IfLetKeyPathContainer { public typealias Value = Wrapped? @usableFromInline - internal let resettable: Resettable::Resettable + internal let resettable: Resettable.Resettable @usableFromInline - internal let keyPath: Swift::KeyPath.Resettable::IfLetKeyPathContainer.Resettable::Value> + internal let keyPath: Swift.KeyPath.IfLetKeyPathContainer.Value> @usableFromInline - internal init(resettable: Resettable::Resettable, keyPath: Swift::KeyPath.Resettable::IfLetKeyPathContainer.Resettable::Value>) - @inlinable public subscript(dynamicMember keyPath: Swift::ReferenceWritableKeyPath) -> Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer { + internal init(resettable: Resettable.Resettable, keyPath: Swift.KeyPath.IfLetKeyPathContainer.Value>) + @inlinable public subscript(dynamicMember keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer { get { IfLetWritableKeyPathContainer( resettable: resettable, @@ -178,7 +178,7 @@ extension Resettable::Resettable { ) } } - @inlinable public subscript(dynamicMember keyPath: Swift::KeyPath) -> Resettable::Resettable.Resettable::IfLetKeyPathContainer { + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer { get { IfLetKeyPathContainer( resettable: resettable, @@ -190,18 +190,18 @@ extension Resettable::Resettable { @dynamicMemberLookup public struct IfLetWritableKeyPathContainer { public typealias Value = Wrapped? @usableFromInline - internal let resettable: Resettable::Resettable + internal let resettable: Resettable.Resettable @usableFromInline - internal let keyPath: Swift::WritableKeyPath.Resettable::IfLetWritableKeyPathContainer.Resettable::Value> + internal let keyPath: Swift.WritableKeyPath.IfLetWritableKeyPathContainer.Value> @usableFromInline - internal init(resettable: Resettable::Resettable, keyPath: Swift::WritableKeyPath.Resettable::IfLetWritableKeyPathContainer.Resettable::Value>) + internal init(resettable: Resettable.Resettable, keyPath: Swift.WritableKeyPath.IfLetWritableKeyPathContainer.Value>) @discardableResult - @inlinable public func callAsFunction(_ value: Wrapped, operation: Resettable::Resettable.Resettable::OperationBehavior = .default) -> Resettable::Resettable { + @inlinable public func callAsFunction(_ value: Wrapped, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable { guard resettable.wrappedValue[keyPath: keyPath] != nil else { return resettable } return self.callAsFunction(operation) { $0 = value } } @discardableResult - @inlinable public func callAsFunction(_ operation: Resettable::Resettable.Resettable::OperationBehavior = .default, _ action: @escaping (inout Wrapped) -> Swift::Void) -> Resettable::Resettable { + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Wrapped) -> Swift.Void) -> Resettable.Resettable { guard let value = resettable.wrappedValue[keyPath: keyPath] else { return resettable } return resettable._modify( operation: operation, @@ -210,7 +210,7 @@ extension Resettable::Resettable { ) } @discardableResult - @inlinable public func callAsFunction(_ operation: Resettable::Resettable.Resettable::OperationBehavior = .default, _ action: @escaping (inout Wrapped) -> Swift::Void, undo: @escaping (inout Wrapped) -> Swift::Void) -> Resettable::Resettable { + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Wrapped) -> Swift.Void, undo: @escaping (inout Wrapped) -> Swift.Void) -> Resettable.Resettable { guard let value = resettable.wrappedValue[keyPath: keyPath] else { return resettable } return resettable._modify( operation: operation, @@ -219,7 +219,7 @@ extension Resettable::Resettable { undo: undo ) } - @inlinable public subscript(dynamicMember keyPath: Swift::WritableKeyPath) -> Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer { + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer { get { IfLetWritableKeyPathContainer( resettable: resettable, @@ -227,7 +227,7 @@ extension Resettable::Resettable { ) } } - @inlinable public subscript(dynamicMember keyPath: Swift::KeyPath) -> Resettable::Resettable.Resettable::IfLetKeyPathContainer { + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer { get { IfLetKeyPathContainer( resettable: resettable, @@ -237,60 +237,60 @@ extension Resettable::Resettable { } } } -extension Resettable::Resettable where Base : SwiftMarkerProtocols::_OptionalProtocol { - public var ifLet: Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer { +extension Resettable.Resettable where Base : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { get } } -extension Resettable::Resettable { - public func ifLet(_ keyPath: Swift::WritableKeyPath) -> Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer - public func ifLet(_ keyPath: Swift::KeyPath) -> Resettable::Resettable.Resettable::IfLetKeyPathContainer +extension Resettable.Resettable { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer } -extension Resettable::Resettable.Resettable::WritableKeyPathContainer where Value : SwiftMarkerProtocols::_OptionalProtocol { - public var ifLet: Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer { +extension Resettable.Resettable.WritableKeyPathContainer where Value : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { get } - public func ifNil(_ value: Value, operation: Resettable::Resettable.Resettable::OperationBehavior = .default) -> Resettable::Resettable + public func ifNil(_ value: Value, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable } -extension Resettable::Resettable.Resettable::KeyPathContainer where Value : SwiftMarkerProtocols::_OptionalProtocol { - public var ifLet: Resettable::Resettable.Resettable::IfLetKeyPathContainer { +extension Resettable.Resettable.KeyPathContainer where Value : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetKeyPathContainer { get } } -extension Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer where Wrapped : SwiftMarkerProtocols::_OptionalProtocol { - public var ifLet: Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer { +extension Resettable.Resettable.IfLetWritableKeyPathContainer where Wrapped : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { get } } -extension Resettable::Resettable.Resettable::IfLetKeyPathContainer where Wrapped : SwiftMarkerProtocols::_OptionalProtocol { - public var ifLet: Resettable::Resettable.Resettable::IfLetKeyPathContainer { +extension Resettable.Resettable.IfLetKeyPathContainer where Wrapped : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetKeyPathContainer { get } } -extension Resettable::Resettable.Resettable::WritableKeyPathContainer { - public func ifLet(_ keyPath: Swift::WritableKeyPath) -> Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer - public func ifLet(_ keyPath: Swift::KeyPath) -> Resettable::Resettable.Resettable::IfLetKeyPathContainer +extension Resettable.Resettable.WritableKeyPathContainer { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer } -extension Resettable::Resettable.Resettable::KeyPathContainer { - public func ifLet(_ keyPath: Swift::ReferenceWritableKeyPath) -> Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer - public func ifLet(_ keyPath: Swift::KeyPath) -> Resettable::Resettable.Resettable::IfLetKeyPathContainer +extension Resettable.Resettable.KeyPathContainer { + public func ifLet(_ keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer } -extension Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer { - public func ifLet(_ keyPath: Swift::WritableKeyPath) -> Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer - public func ifLet(_ keyPath: Swift::KeyPath) -> Resettable::Resettable.Resettable::IfLetKeyPathContainer +extension Resettable.Resettable.IfLetWritableKeyPathContainer { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer } -extension Resettable::Resettable.Resettable::IfLetKeyPathContainer { - public func ifLet(_ keyPath: Swift::ReferenceWritableKeyPath) -> Resettable::Resettable.Resettable::IfLetWritableKeyPathContainer - public func ifLet(_ keyPath: Swift::KeyPath) -> Resettable::Resettable.Resettable::IfLetKeyPathContainer +extension Resettable.Resettable.IfLetKeyPathContainer { + public func ifLet(_ keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer } @usableFromInline @discardableResult -internal func modification(of object: T, with action: (inout T) -> Swift::Void) -> T -extension Resettable::Resettable : Swift::Identifiable where Base : Swift::Identifiable { +internal func modification(of object: T, with action: (inout T) -> Swift.Void) -> T +extension Resettable.Resettable : Swift.Identifiable where Base : Swift.Identifiable { @inlinable public var id: Base.ID { get { wrappedValue.id } } public typealias ID = Base.ID } -extension Resettable::Resettable.Resettable::OperationBehavior : Swift::Equatable {} -extension Resettable::Resettable.Resettable::OperationBehavior : Swift::Hashable {} +extension Resettable.Resettable.OperationBehavior : Swift.Equatable {} +extension Resettable.Resettable.OperationBehavior : Swift.Hashable {} diff --git a/.agents/interfaces/macos/_ResettableDebugging.swiftinterface b/.agents/interfaces/macos/_ResettableDebugging.swiftinterface index 279645e..287e094 100644 --- a/.agents/interfaces/macos/_ResettableDebugging.swiftinterface +++ b/.agents/interfaces/macos/_ResettableDebugging.swiftinterface @@ -1,29 +1,29 @@ // swift-interface-format-version: 1.0 -// swift-compiler-version: Apple Swift version 6.4 (swiftlang-6.4.0.25.4 clang-2100.3.25.1) -// swift-module-flags: -target arm64-apple-macos12.0 -enable-objc-interop -language-mode 6 -O -enable-experimental-feature DebugDescriptionMacro -module-name _ResettableDebugging -package-name swift_resettable -// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.4 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-macosx10.15 -enable-objc-interop -swift-version 6 -O -module-name _ResettableDebugging -package-name swift_resettable +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 import CustomDump @_exported import Resettable import Swift import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -extension Resettable::Resettable { +extension Resettable.Resettable { @available(*, deprecated, message: "Might be removed due to lack of Value type constraint, which makes the behavior unstable, consider re-implementing this feature locally if needed") public struct ValuesDump { @usableFromInline - internal init(items: [Resettable::Resettable.Resettable::Object], currentIndex: Swift::Int) - public let items: [Resettable::Resettable.Resettable::Object] - public let currentIndex: Swift::Int + internal init(items: [Resettable.Resettable.Object], currentIndex: Swift.Int) + public let items: [Resettable.Resettable.Object] + public let currentIndex: Swift.Int } } -extension Resettable::Resettable { +extension Resettable.Resettable { @available(*, deprecated, message: "Might be removed due to lack of Value type constraint, which makes the behavior unstable, consider re-implementing this feature locally if needed") - public func valuesDump() -> Resettable::Resettable._ResettableDebugging::ValuesDump - @inlinable public func dump() -> Swift::String { + public func valuesDump() -> Resettable.Resettable.ValuesDump + @inlinable public func dump() -> Swift.String { var buffer = "" self.dump(to: &buffer) return buffer } - public func dump(to stream: inout TargetStream) where TargetStream : Swift::TextOutputStream + public func dump(to stream: inout TargetStream) where TargetStream : Swift.TextOutputStream } diff --git a/.agents/interfaces/tvos/Resettable.swiftinterface b/.agents/interfaces/tvos/Resettable.swiftinterface new file mode 100644 index 0000000..04375ec --- /dev/null +++ b/.agents/interfaces/tvos/Resettable.swiftinterface @@ -0,0 +1,296 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-tvos13.0-simulator -enable-objc-interop -swift-version 6 -O -module-name Resettable -package-name swift_resettable +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import KeyPathMapping +import KeyPathsExtensions +import Swift +import SwiftMarkerProtocols +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +extension Resettable.Resettable where Base : Swift.Collection { + public var collection: Resettable.Resettable.WritableKeyPathContainer { + get + } +} +extension Resettable.Resettable.WritableKeyPathContainer where Value : Swift.Collection { + @discardableResult + public func swapAt(_ idx1: Swift.Array.Index, _ idx2: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] + @discardableResult + public func remove(at idx: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] + @discardableResult + public func insert(_ element: Swift.Array.Element, at idx: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] + @discardableResult + public func append(_ element: Swift.Array.Element, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] +} +extension Resettable.Resettable { + public enum OperationBehavior { + case `default` + case amend + case insert + case inject + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: Resettable.Resettable.OperationBehavior, _ b: Resettable.Resettable.OperationBehavior) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + } +} +@propertyWrapper @dynamicMemberLookup public class Resettable { + @available(*, deprecated, renamed: "Base") + public typealias Object = Base + convenience public init(wrappedValue: Base) + public init(_ base: Base) + @usableFromInline + internal var base: Base + @inlinable public var wrappedValue: Base { + _read { yield base } + } + @inlinable public var projectedValue: Resettable.Resettable { + get { self } + } + @discardableResult + public func undo() -> Resettable.Resettable + @discardableResult + public func redo() -> Resettable.Resettable + @discardableResult + @inlinable public func undo(_ count: Swift.Int) -> Resettable.Resettable { + for _ in 0.. Resettable.Resettable { + for _ in 0.. Resettable.Resettable + @discardableResult + public func redoAll() -> Resettable.Resettable + @discardableResult + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, _ keyPath: Swift.WritableKeyPath, using action: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable + @discardableResult + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, _ keyPath: Swift.WritableKeyPath, using action: @escaping (inout Value) -> Swift.Void, undo: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable + @discardableResult + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, using action: @escaping (inout Base) -> Swift.Void, undo: @escaping (inout Base) -> Swift.Void) -> Resettable.Resettable + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { + get { + WritableKeyPathContainer( + resettable: self, + keyPath: keyPath + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { + get { + KeyPathContainer( + resettable: self, + keyPath: keyPath + ) + } + } + @objc deinit +} +extension Resettable.Resettable { + @dynamicMemberLookup public struct KeyPathContainer { + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.KeyPath + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.KeyPath) + @inlinable public subscript(dynamicMember keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { + get { + WritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { + get { + KeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } + @dynamicMemberLookup public struct WritableKeyPathContainer { + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.WritableKeyPath + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.WritableKeyPath) + @discardableResult + @inlinable public func callAsFunction(_ value: Value, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable { + return self.callAsFunction(operation) { $0 = value } + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable { + return resettable._modify( + operation: operation, + keyPath, + using: action + ) + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Value) -> Swift.Void, undo: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable { + return resettable._modify( + operation: operation, + keyPath, + using: action, + undo: undo + ) + } + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { + get { + WritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { + get { + KeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } + @dynamicMemberLookup public struct IfLetKeyPathContainer { + public typealias Value = Wrapped? + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.KeyPath.IfLetKeyPathContainer.Value> + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.KeyPath.IfLetKeyPathContainer.Value>) + @inlinable public subscript(dynamicMember keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer { + get { + IfLetWritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer { + get { + IfLetKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } + @dynamicMemberLookup public struct IfLetWritableKeyPathContainer { + public typealias Value = Wrapped? + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.WritableKeyPath.IfLetWritableKeyPathContainer.Value> + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.WritableKeyPath.IfLetWritableKeyPathContainer.Value>) + @discardableResult + @inlinable public func callAsFunction(_ value: Wrapped, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable { + guard resettable.wrappedValue[keyPath: keyPath] != nil else { return resettable } + return self.callAsFunction(operation) { $0 = value } + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Wrapped) -> Swift.Void) -> Resettable.Resettable { + guard let value = resettable.wrappedValue[keyPath: keyPath] else { return resettable } + return resettable._modify( + operation: operation, + keyPath.unwrapped(with: value), + using: action + ) + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Wrapped) -> Swift.Void, undo: @escaping (inout Wrapped) -> Swift.Void) -> Resettable.Resettable { + guard let value = resettable.wrappedValue[keyPath: keyPath] else { return resettable } + return resettable._modify( + operation: operation, + keyPath.unwrapped(with: value), + using: action, + undo: undo + ) + } + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer { + get { + IfLetWritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer { + get { + IfLetKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } +} +extension Resettable.Resettable where Base : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { + get + } +} +extension Resettable.Resettable { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.WritableKeyPathContainer where Value : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { + get + } + public func ifNil(_ value: Value, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable +} +extension Resettable.Resettable.KeyPathContainer where Value : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetKeyPathContainer { + get + } +} +extension Resettable.Resettable.IfLetWritableKeyPathContainer where Wrapped : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { + get + } +} +extension Resettable.Resettable.IfLetKeyPathContainer where Wrapped : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetKeyPathContainer { + get + } +} +extension Resettable.Resettable.WritableKeyPathContainer { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.KeyPathContainer { + public func ifLet(_ keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.IfLetWritableKeyPathContainer { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.IfLetKeyPathContainer { + public func ifLet(_ keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +@usableFromInline +@discardableResult +internal func modification(of object: T, with action: (inout T) -> Swift.Void) -> T +extension Resettable.Resettable : Swift.Identifiable where Base : Swift.Identifiable { + @inlinable public var id: Base.ID { + get { wrappedValue.id } + } + public typealias ID = Base.ID +} +extension Resettable.Resettable.OperationBehavior : Swift.Equatable {} +extension Resettable.Resettable.OperationBehavior : Swift.Hashable {} diff --git a/.agents/interfaces/tvos/_ResettableDebugging.swiftinterface b/.agents/interfaces/tvos/_ResettableDebugging.swiftinterface new file mode 100644 index 0000000..cd4d7b5 --- /dev/null +++ b/.agents/interfaces/tvos/_ResettableDebugging.swiftinterface @@ -0,0 +1,29 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-tvos13.0-simulator -enable-objc-interop -swift-version 6 -O -module-name _ResettableDebugging -package-name swift_resettable +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import CustomDump +@_exported import Resettable +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +extension Resettable.Resettable { + @available(*, deprecated, message: "Might be removed due to lack of Value type constraint, which makes the behavior unstable, consider re-implementing this feature locally if needed") + public struct ValuesDump { + @usableFromInline + internal init(items: [Resettable.Resettable.Object], currentIndex: Swift.Int) + public let items: [Resettable.Resettable.Object] + public let currentIndex: Swift.Int + } +} +extension Resettable.Resettable { + @available(*, deprecated, message: "Might be removed due to lack of Value type constraint, which makes the behavior unstable, consider re-implementing this feature locally if needed") + public func valuesDump() -> Resettable.Resettable.ValuesDump + @inlinable public func dump() -> Swift.String { + var buffer = "" + self.dump(to: &buffer) + return buffer + } + public func dump(to stream: inout TargetStream) where TargetStream : Swift.TextOutputStream +} diff --git a/.agents/interfaces/watchos/Resettable.swiftinterface b/.agents/interfaces/watchos/Resettable.swiftinterface new file mode 100644 index 0000000..abd8496 --- /dev/null +++ b/.agents/interfaces/watchos/Resettable.swiftinterface @@ -0,0 +1,296 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-watchos6.0-simulator -enable-objc-interop -swift-version 6 -O -module-name Resettable -package-name swift_resettable +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import KeyPathMapping +import KeyPathsExtensions +import Swift +import SwiftMarkerProtocols +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +extension Resettable.Resettable where Base : Swift.Collection { + public var collection: Resettable.Resettable.WritableKeyPathContainer { + get + } +} +extension Resettable.Resettable.WritableKeyPathContainer where Value : Swift.Collection { + @discardableResult + public func swapAt(_ idx1: Swift.Array.Index, _ idx2: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] + @discardableResult + public func remove(at idx: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] + @discardableResult + public func insert(_ element: Swift.Array.Element, at idx: Swift.Array.Index, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] + @discardableResult + public func append(_ element: Swift.Array.Element, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable where Value == [T] +} +extension Resettable.Resettable { + public enum OperationBehavior { + case `default` + case amend + case insert + case inject + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: Resettable.Resettable.OperationBehavior, _ b: Resettable.Resettable.OperationBehavior) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + } +} +@propertyWrapper @dynamicMemberLookup public class Resettable { + @available(*, deprecated, renamed: "Base") + public typealias Object = Base + convenience public init(wrappedValue: Base) + public init(_ base: Base) + @usableFromInline + internal var base: Base + @inlinable public var wrappedValue: Base { + _read { yield base } + } + @inlinable public var projectedValue: Resettable.Resettable { + get { self } + } + @discardableResult + public func undo() -> Resettable.Resettable + @discardableResult + public func redo() -> Resettable.Resettable + @discardableResult + @inlinable public func undo(_ count: Swift.Int) -> Resettable.Resettable { + for _ in 0.. Resettable.Resettable { + for _ in 0.. Resettable.Resettable + @discardableResult + public func redoAll() -> Resettable.Resettable + @discardableResult + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, _ keyPath: Swift.WritableKeyPath, using action: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable + @discardableResult + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, _ keyPath: Swift.WritableKeyPath, using action: @escaping (inout Value) -> Swift.Void, undo: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable + @discardableResult + public func _modify(operation: Resettable.Resettable.OperationBehavior = .default, using action: @escaping (inout Base) -> Swift.Void, undo: @escaping (inout Base) -> Swift.Void) -> Resettable.Resettable + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { + get { + WritableKeyPathContainer( + resettable: self, + keyPath: keyPath + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { + get { + KeyPathContainer( + resettable: self, + keyPath: keyPath + ) + } + } + @objc deinit +} +extension Resettable.Resettable { + @dynamicMemberLookup public struct KeyPathContainer { + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.KeyPath + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.KeyPath) + @inlinable public subscript(dynamicMember keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { + get { + WritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { + get { + KeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } + @dynamicMemberLookup public struct WritableKeyPathContainer { + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.WritableKeyPath + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.WritableKeyPath) + @discardableResult + @inlinable public func callAsFunction(_ value: Value, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable { + return self.callAsFunction(operation) { $0 = value } + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable { + return resettable._modify( + operation: operation, + keyPath, + using: action + ) + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Value) -> Swift.Void, undo: @escaping (inout Value) -> Swift.Void) -> Resettable.Resettable { + return resettable._modify( + operation: operation, + keyPath, + using: action, + undo: undo + ) + } + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.WritableKeyPathContainer { + get { + WritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.KeyPathContainer { + get { + KeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } + @dynamicMemberLookup public struct IfLetKeyPathContainer { + public typealias Value = Wrapped? + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.KeyPath.IfLetKeyPathContainer.Value> + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.KeyPath.IfLetKeyPathContainer.Value>) + @inlinable public subscript(dynamicMember keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer { + get { + IfLetWritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer { + get { + IfLetKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } + @dynamicMemberLookup public struct IfLetWritableKeyPathContainer { + public typealias Value = Wrapped? + @usableFromInline + internal let resettable: Resettable.Resettable + @usableFromInline + internal let keyPath: Swift.WritableKeyPath.IfLetWritableKeyPathContainer.Value> + @usableFromInline + internal init(resettable: Resettable.Resettable, keyPath: Swift.WritableKeyPath.IfLetWritableKeyPathContainer.Value>) + @discardableResult + @inlinable public func callAsFunction(_ value: Wrapped, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable { + guard resettable.wrappedValue[keyPath: keyPath] != nil else { return resettable } + return self.callAsFunction(operation) { $0 = value } + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Wrapped) -> Swift.Void) -> Resettable.Resettable { + guard let value = resettable.wrappedValue[keyPath: keyPath] else { return resettable } + return resettable._modify( + operation: operation, + keyPath.unwrapped(with: value), + using: action + ) + } + @discardableResult + @inlinable public func callAsFunction(_ operation: Resettable.Resettable.OperationBehavior = .default, _ action: @escaping (inout Wrapped) -> Swift.Void, undo: @escaping (inout Wrapped) -> Swift.Void) -> Resettable.Resettable { + guard let value = resettable.wrappedValue[keyPath: keyPath] else { return resettable } + return resettable._modify( + operation: operation, + keyPath.unwrapped(with: value), + using: action, + undo: undo + ) + } + @inlinable public subscript(dynamicMember keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer { + get { + IfLetWritableKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + @inlinable public subscript(dynamicMember keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer { + get { + IfLetKeyPathContainer( + resettable: resettable, + keyPath: self.keyPath.appending(path: keyPath) + ) + } + } + } +} +extension Resettable.Resettable where Base : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { + get + } +} +extension Resettable.Resettable { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.WritableKeyPathContainer where Value : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { + get + } + public func ifNil(_ value: Value, operation: Resettable.Resettable.OperationBehavior = .default) -> Resettable.Resettable +} +extension Resettable.Resettable.KeyPathContainer where Value : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetKeyPathContainer { + get + } +} +extension Resettable.Resettable.IfLetWritableKeyPathContainer where Wrapped : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetWritableKeyPathContainer { + get + } +} +extension Resettable.Resettable.IfLetKeyPathContainer where Wrapped : SwiftMarkerProtocols._OptionalProtocol { + public var ifLet: Resettable.Resettable.IfLetKeyPathContainer { + get + } +} +extension Resettable.Resettable.WritableKeyPathContainer { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.KeyPathContainer { + public func ifLet(_ keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.IfLetWritableKeyPathContainer { + public func ifLet(_ keyPath: Swift.WritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +extension Resettable.Resettable.IfLetKeyPathContainer { + public func ifLet(_ keyPath: Swift.ReferenceWritableKeyPath) -> Resettable.Resettable.IfLetWritableKeyPathContainer + public func ifLet(_ keyPath: Swift.KeyPath) -> Resettable.Resettable.IfLetKeyPathContainer +} +@usableFromInline +@discardableResult +internal func modification(of object: T, with action: (inout T) -> Swift.Void) -> T +extension Resettable.Resettable : Swift.Identifiable where Base : Swift.Identifiable { + @inlinable public var id: Base.ID { + get { wrappedValue.id } + } + public typealias ID = Base.ID +} +extension Resettable.Resettable.OperationBehavior : Swift.Equatable {} +extension Resettable.Resettable.OperationBehavior : Swift.Hashable {} diff --git a/.agents/interfaces/watchos/_ResettableDebugging.swiftinterface b/.agents/interfaces/watchos/_ResettableDebugging.swiftinterface new file mode 100644 index 0000000..58b6bbb --- /dev/null +++ b/.agents/interfaces/watchos/_ResettableDebugging.swiftinterface @@ -0,0 +1,29 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-watchos6.0-simulator -enable-objc-interop -swift-version 6 -O -module-name _ResettableDebugging -package-name swift_resettable +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import CustomDump +@_exported import Resettable +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +extension Resettable.Resettable { + @available(*, deprecated, message: "Might be removed due to lack of Value type constraint, which makes the behavior unstable, consider re-implementing this feature locally if needed") + public struct ValuesDump { + @usableFromInline + internal init(items: [Resettable.Resettable.Object], currentIndex: Swift.Int) + public let items: [Resettable.Resettable.Object] + public let currentIndex: Swift.Int + } +} +extension Resettable.Resettable { + @available(*, deprecated, message: "Might be removed due to lack of Value type constraint, which makes the behavior unstable, consider re-implementing this feature locally if needed") + public func valuesDump() -> Resettable.Resettable.ValuesDump + @inlinable public func dump() -> Swift.String { + var buffer = "" + self.dump(to: &buffer) + return buffer + } + public func dump(to stream: inout TargetStream) where TargetStream : Swift.TextOutputStream +}