diff --git a/src/Nyanbyte.Countries/Country.cs b/src/Nyanbyte.Countries/Country.cs index 87a26ce..3af9841 100644 --- a/src/Nyanbyte.Countries/Country.cs +++ b/src/Nyanbyte.Countries/Country.cs @@ -14,6 +14,46 @@ public readonly partial struct Country CcTld = tld; } + public static Country GetFromCode(CountryCode code) + { + return _countries[code]; + } + + public static Country? GetFromName(string name) + { + name = name.Trim(); + return _countries.SingleOrDefault(s => s.Value.OfficialName.Equals(name, StringComparison.OrdinalIgnoreCase) || s.Value.CustomaryName.Equals(name, StringComparison.OrdinalIgnoreCase)).Value; + } + + public static IEnumerable GetByCurrency(string code) + { + code = code.ToUpperInvariant(); + return _countries.Where(s => s.Value.CurrencyCode == code).Select(s => s.Value).AsEnumerable(); + } + + public static IEnumerable GetByCurrency(int code) + { + return _countries.Where(s => s.Value.CurrencyCodeNumeric == code).Select(s => s.Value).AsEnumerable(); + } + + public static Country? GetFromCallingCode(int code) + { + return _countries.SingleOrDefault(s => s.Value.CallingCode == code).Value; + } + + public static Country? GetFromTld(string ccTld) + { + ccTld = ccTld.Trim(); + if (ccTld.Length != 2) + { + throw new ArgumentException($"Invalid ccTLD: {ccTld}"); + } + + return _countries.SingleOrDefault(s => s.Value.CcTld == ccTld).Value; + } + + public static ICollection GetAll() => _countries.Select(c => c.Value).ToArray(); + public readonly CountryCode Code { get; private init; } public readonly int IsoNumeric => (int)Code; public readonly string OfficialName { get; private init; }