From 3af500fbd7b681b193733c6cffea68b7a3260f6d Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Tue, 14 Jul 2026 08:54:22 -0400 Subject: [PATCH 1/3] Add opt-in Skip Fuse support for Android transpilation Gated behind SKIP_FUSE=1 so normal builds are unaffected. Adds a Sources/CoreModelSQLite/Skip/skip.yml configured for mode: native and a CI job that builds with the flag set. --- .github/workflows/swift.yml | 11 +++++++++++ Package.swift | 23 +++++++++++++++++++++++ Sources/CoreModelSQLite/Skip/skip.yml | 2 ++ 3 files changed, 36 insertions(+) create mode 100644 Sources/CoreModelSQLite/Skip/skip.yml diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index 443c6fc..2f67b4d 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -38,6 +38,17 @@ jobs: - name: Test run: swift test -c ${{ matrix.config }} + skip-fuse: + name: Skip Fuse (Android) + runs-on: macos-26 + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Swift Version + run: swift --version + - name: Build (Skip Fuse) + run: SKIP_FUSE=1 swift build --target CoreModelSQLite + android: name: Android runs-on: macos-15 diff --git a/Package.swift b/Package.swift index 76ef54f..86cbf09 100644 --- a/Package.swift +++ b/Package.swift @@ -58,3 +58,26 @@ let package = Package( ) ] ) + +// Skip (skip.dev) Fuse (native) transpilation support +let enableSkipFuse = ProcessInfo.processInfo.environment["SKIP_FUSE"] == "1" +if enableSkipFuse { + // Skip requires higher minimum deployment targets + package.platforms = [ + .macOS(.v13), + .iOS(.v16), + .watchOS(.v9), + .tvOS(.v16), + .macCatalyst(.v16), + ] + package.dependencies += [ + .package(url: "https://source.skip.tools/skip.git", from: "1.9.0"), + .package(url: "https://source.skip.tools/skip-fuse.git", from: "1.0.0"), + ] + package.targets[0].dependencies += [ + .product(name: "SkipFuse", package: "skip-fuse") + ] + package.targets[0].plugins = (package.targets[0].plugins ?? []) + [ + .plugin(name: "skipstone", package: "skip") + ] +} diff --git a/Sources/CoreModelSQLite/Skip/skip.yml b/Sources/CoreModelSQLite/Skip/skip.yml new file mode 100644 index 0000000..b00cedf --- /dev/null +++ b/Sources/CoreModelSQLite/Skip/skip.yml @@ -0,0 +1,2 @@ +skip: + mode: 'native' From 937587122d53d3fa9a6557359a7f71937d008286 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Tue, 14 Jul 2026 12:10:16 -0400 Subject: [PATCH 2/3] Add CoreModel import and AttributeCodable conformance to multiple models --- .../Model/AmenityType.swift | 6 +++ .../ProfessionalDriver/Model/Date/Month.swift | 5 ++ .../Model/Date/Weekday.swift | 5 ++ .../ProfessionalDriver/Model/DriverID.swift | 6 +++ .../ProfessionalDriver/Model/DriverType.swift | 8 +++ .../Model/EmailAddress.swift | 5 ++ .../Model/FleetPaymentType.swift | 5 ++ .../Model/FuelProduct.swift | 2 +- .../ProfessionalDriver/Model/GasVendor.swift | 6 +++ .../ProfessionalDriver/Model/LocationID.swift | 5 ++ .../Model/ParkingNotificationType.swift | 6 +++ .../Model/ParkingPaymentType.swift | 6 +++ .../Model/ParkingProductName.swift | 6 +++ .../Model/ParkingReservation.swift | 49 +------------------ .../Model/PhoneNumber.swift | 5 ++ .../Model/ShowerCreditCardType.swift | 6 +++ .../Model/ShowerPaymentMethod.swift | 6 +++ .../Model/ShowerReservation.swift | 42 +--------------- .../Model/ShowerStatus.swift | 6 +++ .../ProfessionalDriver/Model/State.swift | 6 +++ .../Model/StoreVendor.swift | 6 +++ .../ProfessionalDriver/Model/User.swift | 4 ++ .../ProfessionalDriver/Model/ZipCode.swift | 5 ++ 23 files changed, 116 insertions(+), 90 deletions(-) diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/AmenityType.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/AmenityType.swift index 3e958cd..a95f6b1 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/AmenityType.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/AmenityType.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 10/3/25. // +import CoreModel + /// ProfessionalDriver Amenity Type public enum AmenityType: String, Codable, CaseIterable, Sendable { @@ -26,3 +28,7 @@ public enum AmenityType: String, Codable, CaseIterable, Sendable { /// Clinic case clinic } + +// MARK: - AttributeCodable + +extension AmenityType: AttributeCodable {} diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Date/Month.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Date/Month.swift index 77522ce..d5487ba 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Date/Month.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Date/Month.swift @@ -6,6 +6,7 @@ // import Foundation +import CoreModel public extension Date { @@ -64,6 +65,10 @@ public extension Date.Month { } } +// MARK: - AttributeCodable + +extension Date.Month: AttributeCodable {} + // MARK: - CustomStringConvertible extension Date.Month: CustomStringConvertible { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Date/Weekday.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Date/Weekday.swift index f175a19..edfe50f 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Date/Weekday.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Date/Weekday.swift @@ -6,6 +6,7 @@ // import Foundation +import CoreModel public extension Date { @@ -27,6 +28,10 @@ public extension Date { } } +// MARK: - AttributeCodable + +extension Date.Weekday: AttributeCodable {} + // MARK: - Comparable extension Date.Weekday: Comparable { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/DriverID.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/DriverID.swift index 9d6d336..6d85b1f 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/DriverID.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/DriverID.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 5/6/25. // +import CoreModel + /// Driver ID public struct DriverID: RawRepresentable, Codable, Equatable, Hashable, Sendable { @@ -32,6 +34,10 @@ extension DriverID: ExpressibleByStringLiteral { } } +// MARK: - AttributeCodable + +extension DriverID: AttributeCodable {} + // MARK: - CustomStringConvertible extension DriverID: CustomStringConvertible, CustomDebugStringConvertible { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/DriverType.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/DriverType.swift index 8bc390d..5b530f0 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/DriverType.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/DriverType.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 4/15/25. // +import CoreModel + /// ProfessionalDriver Driver Type public enum DriverType: String, Codable, CaseIterable, Sendable { @@ -18,6 +20,12 @@ public enum DriverType: String, Codable, CaseIterable, Sendable { case fleet = "TF" } +// MARK: - AttributeCodable + +extension DriverType: AttributeCodable {} + +// MARK: - CustomStringConvertible + extension DriverType: CustomStringConvertible { public var description: String { switch self { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/EmailAddress.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/EmailAddress.swift index 848640d..6246d36 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/EmailAddress.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/EmailAddress.swift @@ -6,6 +6,7 @@ // import Foundation +import CoreModel #if canImport(RegexBuilder) import RegexBuilder #endif @@ -64,6 +65,10 @@ internal extension EmailAddress { #endif } +// MARK: - AttributeCodable + +extension EmailAddress: AttributeCodable {} + // MARK: - CustomStringConvertible extension EmailAddress: CustomStringConvertible, CustomDebugStringConvertible { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/FleetPaymentType.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/FleetPaymentType.swift index 268553e..32b9077 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/FleetPaymentType.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/FleetPaymentType.swift @@ -6,6 +6,7 @@ // import Foundation +import CoreModel /// PumpSmart Fleet Payment Identifier public struct FleetPaymentType: Equatable, Hashable, Codable, Sendable, RawRepresentable { @@ -20,6 +21,10 @@ public struct FleetPaymentType: Equatable, Hashable, Codable, Sendable, RawRepre } } +// MARK: - AttributeCodable + +extension FleetPaymentType: AttributeCodable {} + // MARK: - ExpressibleByIntegerLiteral extension FleetPaymentType: ExpressibleByIntegerLiteral { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/FuelProduct.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/FuelProduct.swift index 8c50945..568179c 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/FuelProduct.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/FuelProduct.swift @@ -79,7 +79,7 @@ extension FuelProduct.ID: CustomStringConvertible { extension FuelProduct.ID: ObjectIDConvertible { - public init(objectID: ObjectID) { + public init?(objectID: ObjectID) { self.init(rawValue: objectID.rawValue) } } diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/GasVendor.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/GasVendor.swift index 77a05c8..6255bfa 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/GasVendor.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/GasVendor.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 8/29/23. // +import CoreModel + /// Gas Vendor public enum GasVendor: String, Codable, CaseIterable, Sendable { @@ -32,6 +34,10 @@ public enum GasVendor: String, Codable, CaseIterable, Sendable { case ultraMar = "Ultra-Mar" } +// MARK: - AttributeCodable + +extension GasVendor: AttributeCodable {} + // MARK: - CustomStringConvertible extension GasVendor: CustomStringConvertible, CustomDebugStringConvertible { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/LocationID.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/LocationID.swift index 949e38c..4f67009 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/LocationID.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/LocationID.swift @@ -6,6 +6,7 @@ // import Foundation +import CoreModel /// Location Identifier public struct LocationID: RawRepresentable, Codable, Equatable, Hashable, Sendable { @@ -26,6 +27,10 @@ extension LocationID: ExpressibleByIntegerLiteral { } } +// MARK: - AttributeCodable + +extension LocationID: AttributeCodable {} + // MARK: - CustomStringConvertible extension LocationID: CustomStringConvertible, CustomDebugStringConvertible { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingNotificationType.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingNotificationType.swift index 4b72a3c..105d08a 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingNotificationType.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingNotificationType.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 7/23/25. // +import CoreModel + /// Parking Notification Type public enum ParkingNotificationType: String, Codable, CaseIterable, Sendable { @@ -12,3 +14,7 @@ public enum ParkingNotificationType: String, Codable, CaseIterable, Sendable { case sms = "SMS" } + +// MARK: - AttributeCodable + +extension ParkingNotificationType: AttributeCodable {} diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingPaymentType.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingPaymentType.swift index 0cbf481..fb4ff38 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingPaymentType.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingPaymentType.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 7/23/25. // +import CoreModel + /// Parking Payment Type public enum ParkingPaymentType: String, Codable, CaseIterable, Sendable { @@ -20,3 +22,7 @@ public enum ParkingPaymentType: String, Codable, CaseIterable, Sendable { /// Cash case cash = "Cash" } + +// MARK: - AttributeCodable + +extension ParkingPaymentType: AttributeCodable {} diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingProductName.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingProductName.swift index fcebc2f..391dd53 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingProductName.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingProductName.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 7/23/25. // +import CoreModel + /// Parking Product Name public enum ParkingProductName: String, Codable, CaseIterable, Sendable { @@ -14,3 +16,7 @@ public enum ParkingProductName: String, Codable, CaseIterable, Sendable { case wideLoad = "Wide Load" } + +// MARK: - AttributeCodable + +extension ParkingProductName: AttributeCodable {} diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingReservation.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingReservation.swift index 18c0694..954b962 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingReservation.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ParkingReservation.swift @@ -9,6 +9,7 @@ import Foundation import CoreModel /// ProfessionalDriver Parking Reservation +@Entity public struct ParkingReservation: Equatable, Hashable, Codable, Identifiable, Sendable, CachedEntity { public let id: ID @@ -121,54 +122,6 @@ public struct ParkingReservation: Equatable, Hashable, Codable, Identifiable, Se } } -extension ParkingReservation: Entity { - - public static var entityName: EntityName { - "ParkingReservation" - } - - public static var attributes: [CodingKeys: AttributeType] { - [ - .deviceID: .string, - .created: .date, - .start: .date, - .end: .date, - .confirmationNumber: .string, - .productName: .string, - .paymentType: .string, - .totalCost: .double, - .firstName: .string, - .lastName: .string, - .email: .string, - .phone: .string, - .notificationType: .string, - .assetTruckNumber: .string, - .truckMake: .string, - .truckColor: .string, - .lastCached: .date - ] - } - - public static var relationships: [CodingKeys: Relationship] { - [ - .site: Relationship( - id: .site, - entity: ParkingReservation.self, - destination: Site.self, - type: .toOne, - inverseRelationship: .parkingReservations - ), - .user: Relationship( - id: .user, - entity: ParkingReservation.self, - destination: User.self, - type: .toOne, - inverseRelationship: .parkingReservations - ) - ] - } -} - // MARK: - Supporting Types public extension ParkingReservation { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/PhoneNumber.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/PhoneNumber.swift index 5844167..a470be9 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/PhoneNumber.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/PhoneNumber.swift @@ -6,6 +6,7 @@ // import Foundation +import CoreModel /// Phone Number public struct PhoneNumber: RawRepresentable, Codable, Equatable, Hashable, Sendable { @@ -58,6 +59,10 @@ public extension PhoneNumber { } } +// MARK: - AttributeCodable + +extension PhoneNumber: AttributeCodable {} + // MARK: - ExpressibleByStringLiteral extension PhoneNumber: ExpressibleByStringLiteral { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerCreditCardType.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerCreditCardType.swift index dff2ce0..fd38789 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerCreditCardType.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerCreditCardType.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 11/12/25. // +import CoreModel + /// ProfessionalDriver Shower Credit Card Type public enum ShowerCreditCardType: String, Codable, CaseIterable, Sendable { @@ -13,3 +15,7 @@ public enum ShowerCreditCardType: String, Codable, CaseIterable, Sendable { case discover = "DISCOVER" case americanExpress = "AMERICAN EXPRESS" } + +// MARK: - AttributeCodable + +extension ShowerCreditCardType: AttributeCodable {} diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerPaymentMethod.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerPaymentMethod.swift index f488c31..390333b 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerPaymentMethod.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerPaymentMethod.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 5/7/25. // +import CoreModel + /// ProfessionalDriver Payment method public enum ShowerPaymentMethod: Equatable, Hashable, Codable, Sendable { @@ -71,3 +73,7 @@ extension ShowerPaymentMethod: RawRepresentable { } } } + +// MARK: - AttributeCodable + +extension ShowerPaymentMethod: AttributeCodable {} diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerReservation.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerReservation.swift index d63956b..10578fb 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerReservation.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerReservation.swift @@ -9,6 +9,7 @@ import Foundation import CoreModel /// ProfessionalDriver Shower Reservation +@Entity public struct ShowerReservation: Equatable, Hashable, Codable, Sendable, CachedEntity { public let id: ID @@ -66,47 +67,6 @@ public struct ShowerReservation: Equatable, Hashable, Codable, Sendable, CachedE } } -extension ShowerReservation: Entity { - - public static var entityName: EntityName { - "ShowerReservation" - } - - public static var attributes: [CodingKeys: AttributeType] { - [ - .driver: .string, - .message: .string, - .paymentType: .string, - .price: .double, - .status: .string, - .showerNumber: .string, - .pinNumber: .string, - .unlockingEnabled: .bool, - .created: .date, - .lastCached: .date - ] - } - - public static var relationships: [CodingKeys: Relationship] { - [ - .site: Relationship( - id: .site, - entity: ShowerReservation.self, - destination: Site.self, - type: .toOne, - inverseRelationship: .showerReservations - ), - .user: Relationship( - id: .user, - entity: ShowerReservation.self, - destination: User.self, - type: .toOne, - inverseRelationship: .showerReservations - ) - ] - } -} - // MARK: - Supporting Types public extension ShowerReservation { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerStatus.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerStatus.swift index 51f88ff..df162ff 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerStatus.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ShowerStatus.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 5/6/25. // +import CoreModel + /// Shower Status public enum ShowerStatus: String, Codable, CaseIterable, Sendable { @@ -23,3 +25,7 @@ public enum ShowerStatus: String, Codable, CaseIterable, Sendable { /// See Cashier case seeCashier = "SEE" } + +// MARK: - AttributeCodable + +extension ShowerStatus: AttributeCodable {} diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/State.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/State.swift index 0cf5fdf..b2b0f0a 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/State.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/State.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 8/29/23. // +import CoreModel + /// Enum representing U.S. states and the Canadian province of Ontario. public enum TerritorialState: Equatable, Hashable, Codable, Sendable { @@ -46,6 +48,10 @@ extension TerritorialState: RawRepresentable { } } +// MARK: - AttributeCodable + +extension TerritorialState: AttributeCodable {} + // MARK: - CustomStringConvertible extension TerritorialState: CustomStringConvertible { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/StoreVendor.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/StoreVendor.swift index 6a68bc1..f79fa8b 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/StoreVendor.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/StoreVendor.swift @@ -5,6 +5,8 @@ // Created by Alsey Coleman Miller on 10/2/25. // +import CoreModel + /// TA Store Vendor public enum StoreVendor: String, Codable, Sendable, CaseIterable { @@ -16,3 +18,7 @@ public enum StoreVendor: String, Codable, Sendable, CaseIterable { case goasis = "Goasis" case qsl = "QSL" } + +// MARK: - AttributeCodable + +extension StoreVendor: AttributeCodable {} diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/User.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/User.swift index e68f57b..af24038 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/User.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/User.swift @@ -214,6 +214,10 @@ extension User.Birthday: RawRepresentable, CustomDateRawRepresentable, CustomStr } } +// MARK: - AttributeCodable + +extension User.Birthday: AttributeCodable {} + internal extension User.Birthday { init(_ date: Date.MM_DD) { diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ZipCode.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ZipCode.swift index cd9b90c..902b151 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ZipCode.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/ZipCode.swift @@ -6,6 +6,7 @@ // import Foundation +import CoreModel #if canImport(RegexBuilder) import RegexBuilder #endif @@ -86,6 +87,10 @@ internal extension ZipCode { #endif } +// MARK: - AttributeCodable + +extension ZipCode: AttributeCodable {} + // MARK: - CustomStringConvertible extension ZipCode: CustomStringConvertible, CustomDebugStringConvertible { From eaff665bc97f8373fc13edb6ce1bec7a1b793b47 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Tue, 14 Jul 2026 12:28:43 -0400 Subject: [PATCH 3/3] Bump CoreModel to 2.7.2 and fix remaining AttributeCodable gap 2.7.2 includes the Optional-relationship/attribute macro fix needed for ParkingReservation.deviceID and ShowerReservation.user. Also adds the AttributeCodable conformance missing on Device.ID. --- Package.swift | 2 +- .../ProfessionalDriver/Model/Device.swift | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 86cbf09..bc3b873 100644 --- a/Package.swift +++ b/Package.swift @@ -34,7 +34,7 @@ let package = Package( dependencies: [ .package( url: "https://github.com/PureSwift/CoreModel", - from: "2.7.1" + from: "2.7.2" ), sqliteDependency ], diff --git a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Device.swift b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Device.swift index bcf3d8e..8939cb4 100644 --- a/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Device.swift +++ b/Tests/CoreModelSQLiteTests/ProfessionalDriver/Model/Device.swift @@ -6,6 +6,7 @@ // import Foundation +import CoreModel #if canImport(UIKit) import UIKit @@ -84,6 +85,10 @@ extension Device.ID: ExpressibleByStringLiteral { } } +// MARK: - AttributeCodable + +extension Device.ID: AttributeCodable {} + // MARK: - CustomStringConvertible extension Device.ID: CustomStringConvertible, CustomDebugStringConvertible {