@CaseEquatable is a Swift macro that automatically generates a “raw” case-only enumeration and makes your enum conform to CaseEquatable. This allows you to compare only the case names—ignoring any associated values.
- Automatic
RawCaseGeneration: Synthesizes a nestedRawCaseenum without associated values. - Case-Only Comparison: Conformance to
CaseEquatableenables==between your enum and itsRawCase. - Supports Associated Values: Works on enums with or without associated values.
- Swift 5.9 or later (macros support)
- Xcode 15 or later
Add the package to your Package.swift:
dependencies: [
.package(url: "https://github.com/yourusername/CaseEquatable.git", from: "1.0.0"),
],
targets: [
.target(
name: "YourApp",
dependencies: [
.product(name: "CaseEquatableMacros", package: "CaseEquatable"),
]
),
]Annotate your enum with @CaseEquatable:
import CaseEquatableMacros
@CaseEquatable
enum NetworkResult: Equatable {
case success(data: Data, statusCode: Int)
case failure(error: Error)
case cancelled
}
let result: NetworkResult = .success(data: ..., statusCode: 200)
// Compare only the case name:
if result == .success {
print("Operation succeeded, regardless of payload.")
}The macro generates code equivalent to:
extension NetworkResult: CaseEquatable {
enum RawCase {
case success
case failure
case cancelled
}
static func == (lhs: NetworkResult, rhs: RawCase) -> Bool {
switch lhs {
case .success: return rhs == .success
case .failure: return rhs == .failure
case .cancelled: return rhs == .cancelled
}
}
}Contributions welcome! Please open an issue or submit a pull request.
This project is licensed under the MIT License. See LICENSE.txt for details.