Skip to content

zijievv/CodingKeysGenerator

Repository files navigation

CodingKeysGenerator

Swift macros generating customizable CodingKeys

Declaration

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")

Usage

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`
    }
}

Installation

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.

Xcode

Go to File > Add Package Dependencies... and paste the repo's URL:

https://github.com/zijievv/CodingKeysGenerator