enum SongLanguage: Int { case vietnamese = 0 case english = 1 case thai = 2 case unknown = -1 } extension SongLanguage: Codable { func encode(to encoder: Encoder) throws { var container = encoder.unkeyedContainer() try container.encode(self.rawValue) } public init(from decoder: Decoder) throws { var container = try decoder.unkeyedContainer() if let rawInt = try container.decodeIfPresent(Int.self) { self = SongLanguage(rawValue: rawInt) ?? .unknown } else { self = .unknown } } }