public void RegisterPlugins(CSharpConverter converter) { if (converter == null) { throw new ArgumentNullException(nameof(converter)); } ConvertBegin.Clear(); AfterPreprocessing.Clear(); GetCSharpNameResolvers.Clear(); GetCSharpTypeResolvers.Clear(); GetCSharpContainerResolvers.Clear(); CompilationConverters.Clear(); CommentConverters.Clear(); EnumConverters.Clear(); EnumItemConverters.Clear(); ClassConverters.Clear(); FieldConverters.Clear(); FunctionConverters.Clear(); FunctionTypeConverters.Clear(); ParameterConverters.Clear(); TypedefConverters.Clear(); Converting.Clear(); Converted.Clear(); ConvertEnd.Clear(); RegisteredPlugins.Clear(); for (var index = Options.Plugins.Count - 1; index >= 0; index--) { var plugin = Options.Plugins[index]; if (RegisteredPlugins.Contains(plugin)) { continue; } RegisteredPlugins.Add(plugin); plugin.Register(converter, this); } }
/// <summary> /// Builds a row item from the current line of the csv reader, this method /// does not change the position of the csv reader. If the row item /// does not describe a "reservable" charge, then null is returned /// </summary> /// <param name="reader">The csv reader to read from</param> /// <returns></returns> public static CsvRowItem Build(CsvReader reader) { string instanceType = String.Empty; // The field names are case sensitive if (reader.TryGetField <string>("operation", out string operation) && !String.IsNullOrEmpty(operation) && reader.TryGetField <string>("usagetype", out string usageType) && allUsageTypes.IsMatch(usageType) && reader.TryGetField <string>("servicecode", out string serviceCode) && !String.IsNullOrEmpty(serviceCode) && (Constants.InstanceBasedReservableServices.Contains(serviceCode) ? reader.TryGetField("instance type", out instanceType) : true) ) { reader.TryGetField <string>("sku", out string sku); reader.TryGetField <double>("priceperunit", out double pricePerUnit); reader.TryGetField <string>("leasecontractlength", out string leaseContractLength); reader.TryGetField <string>("pricedescription", out string priceDescription); reader.TryGetField <string>("offertermcode", out string offerTermCode); reader.TryGetField <int>("vcpu", out int vCPU); reader.TryGetField <string>("memory", out string memoryString); double memory = 0; if (!String.IsNullOrEmpty(memoryString)) { memoryString = memoryString.Replace(",", ""); Match memoryMatch = memoryRegex.Match(memoryString); if (memoryMatch.Success) { Double.TryParse(memoryMatch.Groups[1].Value, out memory); } } Term termType = Term.ON_DEMAND; if (reader.TryGetField <string>("termtype", out string termString)) { termType = EnumConverters.ConvertToTerm(termString); } if (String.IsNullOrEmpty(instanceType)) { // This will probably only happen for DynamoDB instanceType = usageType; } PurchaseOption purchaseOption = PurchaseOption.ON_DEMAND; if (reader.TryGetField <string>("purchaseoption", out string PurchaseOptionString)) { purchaseOption = EnumConverters.ConvertToPurchaseOption(PurchaseOptionString); } OfferingClass offeringClass = OfferingClass.STANDARD; if (reader.TryGetField <string>("offeringclass", out string offeringClassString)) { offeringClass = EnumConverters.ConvertToOfferingClass(offeringClassString); } // Only EC2 has tenancy if (!reader.TryGetField <string>("tenancy", out string tenancy)) { tenancy = "Shared"; } int lease = String.IsNullOrEmpty(leaseContractLength) ? 0 : Int32.Parse(Regex.Match(leaseContractLength, "^([0-9]+)").Groups[1].Value); string platform = GetPlatform(reader); if (!reader.TryGetField <string>("operating system", out string operatingSystem)) { if (!String.IsNullOrEmpty(platform)) { operatingSystem = platform; } else { operatingSystem = serviceCode; } } return(new CsvRowItem( sku, offerTermCode, termType, lease, pricePerUnit, vCPU, memory, purchaseOption, offeringClass, tenancy, instanceType, platform, operatingSystem, operation, usageType, serviceCode, RegionMapper.GetRegionFromUsageType(usageType), priceDescription )); } else { return(null); } }