krzyzanowskim / JSONCodable

JSON Codable is what we need 90% of the time

Home Page:https://twitter.com/krzyzanowskim/status/1213943161309011969

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

JSONCodable

JSON Codable is what we need 90% of the time.

Usage

struct Filter: JSONCodable {
  let id: String
}

let jsonString = try Filter(id: "foo").toJSON()

or use CodableFormat:

struct Filter: Codable {
  let id: String
}

let data = try Filter(id: "foo").to(.json)
let filter = try Filter.from(data, format: .json)

Custom format

To add custom format, add it to CodableFormat like this:

extension CodableFormat {

  private static var jsonSnakeCaseEncoder: JSONEncoder {
    let encoder = JSONEncoder()
    encoder.keyEncodingStrategy = .convertToSnakeCase
    return encoder
  }

  private static var jsonSnakeCaseDecoder: JSONDecoder {
    let decoder = JSONDecoder()
    decoder.keyDecodingStrategy = .convertFromSnakeCase
    return decoder
  }

  // Custom format
  static let jsonSnakeCase = CodableFormat("jsonSnakeCase", jsonSnakeCaseEncoder, jsonSnakeCaseDecoder)
}

// use jsonSnakeCase format
let json = try Filter(id: "foo").to(.jsonSnakeCase)

Installation

Copy JSONCodable.swift to your project, or

Swift Package Manager

To depend on the package, you need to declare your dependency in your Package.swift:

.package(url: "https://github.com/krzyzanowskim/JSONCodable.git", from: "1.2.0"),

and to your application/library target, add "JSONCodable" to your dependencies, e.g. like this:

.target(name: "BestExampleApp", dependencies: ["JSONCodable"]),

About

JSON Codable is what we need 90% of the time

https://twitter.com/krzyzanowskim/status/1213943161309011969

License:MIT License


Languages

Language:Swift 100.0%