public int Generate( string wszInputFilePath, string bstrInputFileContents, string wszDefaultNamespace, IntPtr[] rgbOutputFileContents, out uint pcbOutput, IVsGeneratorProgress pGenerateProgress) { try { pGenerateProgress.Progress(5); var options = GetOptionsFromOptionsPage(); string baseDirectory = Path.GetDirectoryName(wszInputFilePath); string apiName = Path.GetFileNameWithoutExtension(wszInputFilePath); if (options.UseUserOptions) { string optionsPath = Path.Combine(baseDirectory, $"{apiName}.RestEaseOptions"); if (!File.Exists(optionsPath)) { try { string json = _optionsFactory.Serialize(options); File.WriteAllText(optionsPath, json); } catch { Trace.WriteLine($"Unable to write custom settings file '{optionsPath}'."); } } else { try { var restEaseUserOptions = _optionsFactory.Deserialize(File.ReadAllText(optionsPath)); options.MergeWith(restEaseUserOptions); } catch { Trace.WriteLine($"Unable to read custom settings file '{optionsPath}'."); } } } Trace.WriteLine("Generating Interface and Models"); var settings = AutoMapperUtils.Instance.Mapper.Map <GeneratorSettings>(options); settings.SingleFile = true; settings.Namespace = wszDefaultNamespace; settings.ApiName = apiName; //var settings = new GeneratorSettings //{ // SingleFile = true, // Namespace = wszDefaultNamespace, // ApiName = apiName, // ArrayType = options.ArrayType, // UseDateTimeOffset = options.UseDateTimeOffset, // MethodReturnType = options.MethodReturnType, // AppendAsync = options.AppendAsync, // GenerateFormUrlEncodedExtensionMethods = options.GenerateFormUrlEncodedExtensionMethods, // GenerateApplicationOctetStreamExtensionMethods = options.GenerateApplicationOctetStreamExtensionMethods, // GenerateMultipartFormDataExtensionMethods = options.GenerateMultipartFormDataExtensionMethods, // MultipartFormDataFileType = options.MultipartFormDataFileType, // ApplicationOctetStreamType = options.ApplicationOctetStreamType, // ApiNamespace = options.ApiNamespace, // ModelsNamespace = options.ModelsNamespace, // ReturnObjectFromMethodWhenResponseIsDefinedButNoModelIsSpecified = options.ReturnObjectFromMethodWhenResponseIsDefinedButNoModelIsSpecified, // PreferredContentType = options.PreferredContentType, // ForceContentTypeToApplicationJson = options.ForceContentTypeToApplicationJson, // UseOperationIdAsMethodName = options.UseOperationIdAsMethodName, // PreferredSecurityDefinitionType = options.PreferredSecurityDefinitionType, // GeneratePrimitivePropertiesAsNullableForOpenApi20 = options.GeneratePrimitivePropertiesAsNullableForOpenApi20 //}; var result = _generator.FromStream(File.OpenRead(wszInputFilePath), settings, out var diagnostic); if (options.FailOnOpenApiErrors && diagnostic.Errors.Any()) { var errorMessages = string.Join(" | ", diagnostic.Errors.Select(e => JsonSerializer.Serialize(e))); Trace.WriteLine($"OpenApi Errors: {errorMessages}"); pcbOutput = 0; return(1); } pGenerateProgress.Progress(90); string code = result.First().Content; rgbOutputFileContents[0] = code.ConvertToIntPtr(out pcbOutput); pGenerateProgress.Progress(100); Trace.WriteLine("All done"); } catch (Exception e) { pGenerateProgress.GeneratorError(e); Trace.WriteLine("Unable to generate code"); Trace.WriteLine(e); throw; } return(0); }