diff --git a/Package.resolved b/Package.resolved index 329d16bb..660e69c7 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "aa0fd2e35b551c5a0558c96a63275f3b05620dac86f000f4bc0c1db36eddbed0", + "originHash" : "f375577a6318449b73c9a4adde100413c793e5231ea343b53a0f08072ecaa86b", "pins" : [ { "identity" : "darwinprivateframeworks", @@ -7,7 +7,7 @@ "location" : "https://github.com/OpenSwiftUIProject/DarwinPrivateFrameworks.git", "state" : { "branch" : "main", - "revision" : "2cec508df7d16801a1bb5b659b906cec465b213e" + "revision" : "ad18bd6feaa29e9b138ff7823796c6bc76295fb7" } }, { diff --git a/Sources/OpenGraph/Attribute/Attribute/External.swift b/Sources/OpenGraph/Attribute/Attribute/External.swift index 417dda14..848f2e0e 100644 --- a/Sources/OpenGraph/Attribute/Attribute/External.swift +++ b/Sources/OpenGraph/Attribute/Attribute/External.swift @@ -14,7 +14,9 @@ public struct External { extension External: _AttributeBody { public static var comparisonMode: OGComparisonMode { ._3 } + public static var flags: OGAttributeTypeFlags { [] } + public static func _update(_: UnsafeMutableRawPointer, attribute _: AnyAttribute) {} } diff --git a/Sources/OpenGraph/Attribute/Attribute/Focus.swift b/Sources/OpenGraph/Attribute/Rule/Focus.swift similarity index 76% rename from Sources/OpenGraph/Attribute/Attribute/Focus.swift rename to Sources/OpenGraph/Attribute/Rule/Focus.swift index c9f89bbf..c3a7ecc8 100644 --- a/Sources/OpenGraph/Attribute/Attribute/Focus.swift +++ b/Sources/OpenGraph/Attribute/Rule/Focus.swift @@ -5,7 +5,8 @@ // Audited for RELEASE_2021 // Status: Complete -public struct Focus { +@frozen +public struct Focus: Rule, CustomStringConvertible { public var root: Attribute public var keyPath: KeyPath @@ -13,17 +14,10 @@ public struct Focus { self.root = root self.keyPath = keyPath } -} - -// MARK: - Rule -extension Focus: Rule { public var value: Value { root.value[keyPath: keyPath] } - public static var flags: OGAttributeTypeFlags { [] } -} -// MARK: CustomStringConvertible + public static var flags: OGAttributeTypeFlags { [] } -extension Focus: CustomStringConvertible { public var description: String { "• \(Metadata(Value.self).description)" } } diff --git a/Sources/OpenGraph/Attribute/Rule/Map.swift b/Sources/OpenGraph/Attribute/Rule/Map.swift new file mode 100644 index 00000000..4965876d --- /dev/null +++ b/Sources/OpenGraph/Attribute/Rule/Map.swift @@ -0,0 +1,25 @@ +// +// Map.swift +// OpenGraph +// +// Audited for RELEASE_2021 +// Status: Complete + +// MARK: - Map + +@frozen +public struct Map: Rule, CustomStringConvertible { + public var arg: Attribute + public let body: (Source) -> Value + + public init(_ arg: Attribute, _ body: @escaping (Source) -> Value) { + self.arg = arg + self.body = body + } + + public var value: Value { body(arg.value) } + + public static var flags: OGAttributeTypeFlags { [] } + + public var description: String { "λ \(Value.self)" } +} diff --git a/Sources/OpenGraph/Attribute/Rule/AnyRuleContext.swift b/Sources/OpenGraph/Attribute/RuleContext/AnyRuleContext.swift similarity index 100% rename from Sources/OpenGraph/Attribute/Rule/AnyRuleContext.swift rename to Sources/OpenGraph/Attribute/RuleContext/AnyRuleContext.swift diff --git a/Sources/OpenGraph/Attribute/Rule/RuleContext.swift b/Sources/OpenGraph/Attribute/RuleContext/RuleContext.swift similarity index 100% rename from Sources/OpenGraph/Attribute/Rule/RuleContext.swift rename to Sources/OpenGraph/Attribute/RuleContext/RuleContext.swift diff --git a/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/AttributeTests.swift b/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/AttributeTests.swift index d92448e3..176989eb 100644 --- a/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/AttributeTests.swift +++ b/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/AttributeTests.swift @@ -1,8 +1,6 @@ // // AttributeTests.swift -// -// -// +// OpenGraphCompatibilityTests import Testing diff --git a/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/ExternalTests.swift b/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/ExternalTests.swift index 81e96a31..02229bba 100644 --- a/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/ExternalTests.swift +++ b/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/ExternalTests.swift @@ -1,8 +1,6 @@ // // ExternalTests.swift -// -// -// +// OpenGraphCompatibilityTests import Testing diff --git a/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/FocusTests.swift b/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/FocusTests.swift index 084e6e81..a138b9c5 100644 --- a/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/FocusTests.swift +++ b/Tests/OpenGraphCompatibilityTests/Attribute/Attribute/FocusTests.swift @@ -1,8 +1,6 @@ // // FocusTests.swift -// -// -// +// OpenGraphCompatibilityTests import Testing diff --git a/Tests/OpenGraphCompatibilityTests/Attribute/Indirect/IndirectAttributeTests.swift b/Tests/OpenGraphCompatibilityTests/Attribute/Indirect/IndirectAttributeTests.swift index b92f540a..25be0440 100644 --- a/Tests/OpenGraphCompatibilityTests/Attribute/Indirect/IndirectAttributeTests.swift +++ b/Tests/OpenGraphCompatibilityTests/Attribute/Indirect/IndirectAttributeTests.swift @@ -1,9 +1,6 @@ // // IndirectAttributeTests.swift -// -// -// Created by Kyle on 2024/3/3. -// +// OpenGraphCompatibilityTests import Testing diff --git a/Tests/OpenGraphCompatibilityTests/Attribute/Optional/AnyOptionalAttributeTests.swift b/Tests/OpenGraphCompatibilityTests/Attribute/Optional/AnyOptionalAttributeTests.swift index 599f493e..c7ee8b98 100644 --- a/Tests/OpenGraphCompatibilityTests/Attribute/Optional/AnyOptionalAttributeTests.swift +++ b/Tests/OpenGraphCompatibilityTests/Attribute/Optional/AnyOptionalAttributeTests.swift @@ -1,9 +1,6 @@ // // AnyOptionalAttributeTests.swift -// -// -// Created by Kyle on 2024/3/3. -// +// OpenGraphCompatibilityTests import Testing diff --git a/Tests/OpenGraphCompatibilityTests/Attribute/Optional/OptionalAttributeTests.swift b/Tests/OpenGraphCompatibilityTests/Attribute/Optional/OptionalAttributeTests.swift index 81ea2f82..f5adf8b6 100644 --- a/Tests/OpenGraphCompatibilityTests/Attribute/Optional/OptionalAttributeTests.swift +++ b/Tests/OpenGraphCompatibilityTests/Attribute/Optional/OptionalAttributeTests.swift @@ -1,9 +1,6 @@ // // OptionalAttributeTests.swift -// -// -// Created by Kyle on 2024/3/3. -// +// OpenGraphCompatibilityTests import Testing diff --git a/Tests/OpenGraphCompatibilityTests/Attribute/Rule/MapTests.swift b/Tests/OpenGraphCompatibilityTests/Attribute/Rule/MapTests.swift new file mode 100644 index 00000000..3f9238b2 --- /dev/null +++ b/Tests/OpenGraphCompatibilityTests/Attribute/Rule/MapTests.swift @@ -0,0 +1,26 @@ +// +// MapTests.swift +// OpenGraphCompatibilityTests + +import Testing + +@Suite(.disabled(if: !compatibilityTestEnabled)) +final class MapTests: AttributeTestBase { + @Test + func description() throws { + let map = Map(.init(value: 2)) { $0.description } + let map2 = Map(.init(value: 1)) { $0 + 2 } + + #expect(map.description == "λ String") + #expect(map2.description == "λ Int") + } + + @Test + func value() throws { + let map = Map(.init(value: 2)) { $0.description } + let map2 = Map(.init(value: 1)) { $0 + 2 } + + #expect(map.value == "2") + #expect(map2.value == 3) + } +} diff --git a/Tests/OpenGraphCompatibilityTests/Attribute/Rule/RuleTests.swift b/Tests/OpenGraphCompatibilityTests/Attribute/Rule/RuleTests.swift index 65785aca..2e27ac9d 100644 --- a/Tests/OpenGraphCompatibilityTests/Attribute/Rule/RuleTests.swift +++ b/Tests/OpenGraphCompatibilityTests/Attribute/Rule/RuleTests.swift @@ -1,8 +1,6 @@ // // RuleTests.swift -// -// -// +// OpenGraphCompatibilityTests import Testing diff --git a/Tests/OpenGraphCompatibilityTests/Attribute/Weak/OGWeakAttributeTests.swift b/Tests/OpenGraphCompatibilityTests/Attribute/Weak/OGWeakAttributeTests.swift index c19cf81d..30d5cfc8 100644 --- a/Tests/OpenGraphCompatibilityTests/Attribute/Weak/OGWeakAttributeTests.swift +++ b/Tests/OpenGraphCompatibilityTests/Attribute/Weak/OGWeakAttributeTests.swift @@ -1,9 +1,6 @@ // // AnyWeakAttributeTests.swift -// -// -// Created by Kyle on 2024/3/4. -// +// OpenGraphCompatibilityTests import Testing diff --git a/Tests/OpenGraphCompatibilityTests/Attribute/Weak/WeakAttributeTests.swift b/Tests/OpenGraphCompatibilityTests/Attribute/Weak/WeakAttributeTests.swift index a34735ad..8f431f33 100644 --- a/Tests/OpenGraphCompatibilityTests/Attribute/Weak/WeakAttributeTests.swift +++ b/Tests/OpenGraphCompatibilityTests/Attribute/Weak/WeakAttributeTests.swift @@ -1,9 +1,6 @@ // // WeakAttributeTests.swift -// -// -// Created by Kyle on 2024/3/3. -// +// OpenGraphCompatibilityTests import Testing