facet_generate 0.16.0

Generate Swift, Kotlin and TypeScript from types annotated with `#[derive(Facet)]`
Documentation
import Foundation

/// This is a comment.
struct ArcyColors: Codable {
    var red: UInt8
    var blue: String
    var green: [String]

    init(red: UInt8, blue: String, green: [String]) {
        self.red = red
        self.blue = blue
        self.green = green
    }
}

/// This is a comment.
struct MutexyColors: Codable {
    var blue: [String]
    var green: String

    init(blue: [String], green: String) {
        self.blue = blue
        self.green = green
    }
}

/// This is a comment.
struct RcyColors: Codable {
    var red: String
    var blue: [String]
    var green: String

    init(red: String, blue: [String], green: String) {
        self.red = red
        self.blue = blue
        self.green = green
    }
}

/// This is a comment.
struct CellyColors: Codable {
    var red: String
    var blue: [String]

    init(red: String, blue: [String]) {
        self.red = red
        self.blue = blue
    }
}

/// This is a comment.
struct LockyColors: Codable {
    var red: String

    init(red: String) {
        self.red = red
    }
}

/// This is a comment.
struct CowyColors: Codable {
    var lifetime: String

    init(lifetime: String) {
        self.lifetime = lifetime
    }
}

/// This is a comment.
enum BoxyColors: Codable {
    case red
    case blue
    case green(String)

    enum `Type`: String, CodingKey, Codable, CaseIterable {
        case red = "Red"
        case blue = "Blue"
        case green = "Green"
    }

    var type: `Type` {
        switch self {
        case .red: return .red
        case .blue: return .blue
        case .green: return .green
        }
    }

    private enum CodingKeys: String, CodingKey {
        case type
        case content
    }

    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        let type = try container.decode(`Type`.self, forKey: .type)
        switch type {
        case .red:
            self = .red
        case .blue:
            self = .blue
        case .green:
            let content = try container.decode(String.self, forKey: .content)
            self = .green(content)
        }
    }

    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        switch self {
        case .red:
            try container.encode(`Type`.red, forKey: .type)
        case .blue:
            try container.encode(`Type`.blue, forKey: .type)
        case .green(let content):
            try container.encode(`Type`.green, forKey: .type)
            try container.encode(content, forKey: .content)
        }
    }
}