import Foundation enum BugPriority: String, Codable, Comparable, CaseIterable { case p0 = "P0" case p1 = "P1" case p2 = "P2" case p3 = "P3" case unknown init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() let raw = try container.decode(String.self) self = BugPriority(rawValue: raw) ?? .unknown } static func < (lhs: BugPriority, rhs: BugPriority) -> Bool { order(lhs) < order(rhs) } private static func order(_ priority: BugPriority) -> Int { switch priority { case .p0: 0 case .p1: 1 case .p2: 2 case .p3: 3 case .unknown: 4 } } }