import os import Foundation public struct Country { public var name: String public var code: String public var flag: String public var regex: String public var prefix: String public var example: String public var prefixWithFlag: String { "\(flag) \(prefix)" } public static func fromMyPhone() -> Self { let all = all() guard let country = all.filter({ $0.code == Locale.current.regionCode }).first else { return all.filter { $0.code == "US" }.first! } return country } public static func all() -> [Self] { guard let url = Bundle.module.url(forResource: "country_codes", withExtension: "json"), let data = try? Data(contentsOf: url), let countries = try? JSONDecoder().decode([Country].self, from: data) else { fatalError("Can't handle country codes json") } return countries } public static func findFrom(_ number: String) -> Self { all().first { country in let start = number.index(number.startIndex, offsetBy: number.count - 2) let end = number.index(start, offsetBy: number.count - (number.count - 2)) return country.code == String(number[start ..< end]) }! } } extension Country: Hashable {} extension Country: Equatable {} extension Country: Decodable {}