JSON Codable is what we need 90% of the time.
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)
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)
Copy JSONCodable.swift
to your project, or
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"]),