Swift Codable
swift
Generate Swift Codable structs with CodingKeys from SQL schema
Example Output
Generated from the pet-store sample schema:
swift
// Generated by @sqldoc/templates/swift-codable -- DO NOT EDIT
import Foundation
struct Adoption: Codable {
let id: Int
let petId: Int
let ownerId: Int
let adoptedAt: Date
let adoptionFee: Decimal
enum CodingKeys: String, CodingKey {
case id
case petId = "pet_id"
case ownerId = "owner_id"
case adoptedAt = "adopted_at"
case adoptionFee = "adoption_fee"
}
}
struct AdoptionsAuditLog: Codable {
let id: Int64
let tableName: String
let operation: String
let oldData: String?
let newData: String?
let changedAt: Date
enum CodingKeys: String, CodingKey {
case id
case tableName = "table_name"
case operation
case oldData = "old_data"
case newData = "new_data"
case changedAt = "changed_at"
}
}
struct Category: Codable {
let id: Int
let name: String
let description: String?
}
struct LegacyInventory: Codable {
let id: Int
let itemName: String?
let oldSku: String?
let quantity: Int?
enum CodingKeys: String, CodingKey {
case id
case itemName = "item_name"
case oldSku = "old_sku"
case quantity
}
}
struct Location: Codable {
let id: Int
let name: String
let address: String
let city: String
let zip: String?
}
struct MedicalRecord: Codable {
let id: Int
let petId: Int
let visitDate: Date
let diagnosis: String
let treatment: String?
let vetName: String?
enum CodingKeys: String, CodingKey {
case id
case petId = "pet_id"
case visitDate = "visit_date"
case diagnosis
case treatment
case vetName = "vet_name"
}
}
struct Owner: Codable {
let id: Int
let name: String
let email: String
let phone: String?
let createdAt: Date?
enum CodingKeys: String, CodingKey {
case id
case name
case email
case phone
case createdAt = "created_at"
}
}
struct Pet: Codable {
let id: Int
let categoryId: Int?
let name: String
let sku: String
let price: Decimal
let internalNotes: String?
let status: String
let createdAt: Date?
enum CodingKeys: String, CodingKey {
case id
case categoryId = "category_id"
case name
case sku
case price
case internalNotes = "internal_notes"
case status
case createdAt = "created_at"
}
}
struct Review: Codable {
let id: Int
let petId: Int
let ownerId: Int
let rating: Int
let body: String?
let locationId: Int?
let createdAt: Date?
enum CodingKeys: String, CodingKey {
case id
case petId = "pet_id"
case ownerId = "owner_id"
case rating
case body
case locationId = "location_id"
case createdAt = "created_at"
}
}
struct StaffAuditLog: Codable {
let id: Int64
let tableName: String
let operation: String
let oldData: String?
let newData: String?
let changedAt: Date
enum CodingKeys: String, CodingKey {
case id
case tableName = "table_name"
case operation
case oldData = "old_data"
case newData = "new_data"
case changedAt = "changed_at"
}
}Usage
Add to your sqldoc.config.ts:
typescript
export default {
dialect: 'postgres',
schema: ['./schema.sql'],
codegen: [
{
template: 'swift-codable',
output: './generated/Models.swift',
},
],
}Then run:
bash
sqldoc codegen