private static AWSPublicIpAddressRanges Parse(string fileContent)
{
try
{
var instance = new AWSPublicIpAddressRanges();
var json = JsonMapper.ToObject(new JsonReader(fileContent));
DateTime? creationDateTime = null;
try
{
var createdAt = (string)json[createDateKey];
creationDateTime = DateTime.ParseExact(createdAt, createDateFormatString, null);
}
catch (FormatException) { }
catch (ArgumentNullException) { }
instance.CreateDate = creationDateTime.GetValueOrDefault(DateTime.Now.ToUniversalTime());
// ipv4 and v6 addresses occupy different keys in the data file and can't easily be merged
// so process each subset separately
var parsedRanges = new List<AWSPublicIpAddressRange>();
var ipv4Ranges = json[ipv4PrefixesKey];
var ipv6Ranges = json[ipv6PrefixesKey];
if (!ipv4Ranges.IsArray || !ipv6Ranges.IsArray)
throw new InvalidDataException("Expected array content for ip_prefixes and/or ipv6_prefixes keys.");
parsedRanges.AddRange(ParseRange(ipv4Ranges, AWSPublicIpAddressRange.AddressFormat.Ipv4));
parsedRanges.AddRange(ParseRange(ipv6Ranges, AWSPublicIpAddressRange.AddressFormat.Ipv6));
instance.AllAddressRanges = parsedRanges;
return instance;
}
catch (Exception e)
{
throw new InvalidDataException("IP address ranges content in unexpected/invalid format.", e);
}
}