struct AnyCodingKey: CodingKey, Equatable { var stringValue: String var intValue: Int? init?(stringValue: String) { self.stringValue = stringValue intValue = nil } init?(intValue: Int) { stringValue = "\(intValue)" self.intValue = intValue } init(_ base: Key) where Key: CodingKey { if let intValue = base.intValue { self.init(intValue: intValue)! } else { self.init(stringValue: base.stringValue)! } } } extension AnyCodingKey: Hashable {}