Skip to content
On this page

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