Swift macros generating customizable CodingKeys
public enum CodingKeyStyle {
case camelCased
case kebabCased
case snakeCased
}
@attached(member, names: named(CodingKeys))
public macro CodingKeys(style: CodingKeyStyle = .snakeCased) = #externalMacro(module: "CodingKeysGeneratorMacros", type: "CodingKeysMacro")
@attached(peer)
public macro CodingKey(custom: String) = #externalMacro(module: "CodingKeysGeneratorMacros", type: "CustomCodingKeyMacro")
@attached(peer)
public macro CodingKeyIgnored() = #externalMacro(module: "CodingKeysGeneratorMacros", type: "CodingKeyIgnoredMacro")
Source code:
@CodingKeys(style: .snakeCased) // default style is `snakeCased`
struct Entity {
@CodingKey(custom: "entity_id")
let id: String
let currentValue: Int
let count: Int
let `protocol`: String
@CodingKeyIgnored
let foo: Bool
}
Expanded source:
struct Entity {
let id: String
let currentValue: Int
let count: Int
let `protocol`: String
let foo: Bool
enum CodingKeys: String, CodingKey {
case id = "entity_id"
case currentValue = "current_value"
case count
case `protocol`
}
}
Swift Package Manager (SPM)
Add the following line to the dependencies in Package.swift
, to use CodingKeysGenerator macros in a SPM project:
.package(url: "https://github.com/zijievv/CodingKeysGenerator", from: "0.1.0"),
In your target:
.target(name: "<TARGET_NAME>", dependencies: [
.product(name: "CodingKeysGenerator", package: "CodingKeysGenerator"),
// ...
]),
Add import CodingKeysGenerator
into your source code to use CodingKeysGenerator macros.
Go to File > Add Package Dependencies...
and paste the repo's URL:
https://github.com/zijievv/CodingKeysGenerator