private static async Task GenerateGlossarySdk() { if (!baseUrl.EndsWith("/")) { baseUrl += "/"; } var url = baseUrl + "swagger/v1/swagger.json"; var document = await SwaggerDocument.FromUrlAsync(url); var settings = new SwaggerToCSharpClientGeneratorSettings { ClassName = "GlossaryClient", GenerateClientInterfaces = true, OperationNameGenerator = new SingleClientFromOperationIdOperationNameGenerator(), ExceptionClass = "GlossaryClientException", InjectHttpClient = true, CSharpGeneratorSettings = { Namespace = "Glossary.Client", ClassStyle = NJsonSchema.CodeGeneration.CSharp.CSharpClassStyle.Poco, ArrayType = "System.Collections.Generic.List" } }; var generator = new SwaggerToCSharpClientGenerator(document, settings); var code = generator.GenerateFile(); code = code.Replace("Required = Newtonsoft.Json.Required.Always", "Required = Newtonsoft.Json.Required.Default"); var path = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..\\..\\..\\..\\Client\\GlossaryClient.cs")); File.WriteAllText(path, code); Console.WriteLine("Glossary sdk generated"); }
private static async Task GeneratePaymentSdk() { if (!baseUrl.EndsWith("/")) { baseUrl += "/"; } var url = baseUrl + "swagger/v1/swagger.json"; var document = await SwaggerDocument.FromUrlAsync(url); var settings = new SwaggerToCSharpClientGeneratorSettings { ClassName = "ApiClient", GenerateClientInterfaces = true, OperationNameGenerator = new SingleClientFromOperationIdOperationNameGenerator(), ExceptionClass = "ApiClientException", InjectHttpClient = true, CSharpGeneratorSettings = { Namespace = "ServerlessTemplate", ClassStyle = NJsonSchema.CodeGeneration.CSharp.CSharpClassStyle.Poco, ArrayType = "System.Collections.Generic.List" }, }; var generator = new SwaggerToCSharpClientGenerator(document, settings); var code = generator.GenerateFile(); var path = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..\\..\\..\\..\\Client\\ApiClient.cs")); File.WriteAllText(path, code); Console.WriteLine("Api client generated"); }
public static (bool isSinlgeClient, string typeName) GenerateCSharp(SwaggerDocument document, ApiClientDefinition definition) { var nameGenerator = new CustomNameGenerator(); var settings = new SwaggerToCSharpClientGeneratorSettings() { GenerateSyncMethods = true, OperationNameGenerator = nameGenerator, GenerateOptionalParameters = true, }; settings.CSharpGeneratorSettings.ClassStyle = CSharpClassStyle.Poco; settings.CSharpGeneratorSettings.Namespace = definition.Namespace; settings.CSharpGeneratorSettings.ArrayType = "System.Collections.Generic.List"; settings.CSharpGeneratorSettings.PropertyNameGenerator = new MyPropertyNameGenerator(c => ConversionUtilities.ConvertToUpperCamelCase(c, true)); var generator = new SwaggerToCSharpClientGenerator(document, settings); var csharp = generator.GenerateFile(); var newClient = InjectWrapperClass(csharp, Path.GetFileNameWithoutExtension(definition.CSharpClient), document, settings.OperationNameGenerator, out var isSinlgeClient, out var wrapperTypeName); definition.IsSingleClient = isSinlgeClient; if (definition.GenerateWrapperClass) { csharp = newClient; } File.WriteAllText(definition.CSharpClient, csharp); return(isSinlgeClient, wrapperTypeName); }
public static void WriteServices(FileInfo inputSchema, FileInfo outputCSharp, SwaggerToCSharpClientGeneratorSettings settings) { SwaggerDocument document; try { document = SwaggerDocument.FromFileAsync(inputSchema.FullName).Result; } catch (Exception exception) { Console.WriteLine(exception); throw; } SwaggerToCSharpClientGenerator generator = new SwaggerToCSharpClientGenerator(document, settings); try { File.WriteAllText(outputCSharp.FullName, generator.GenerateFile()); } catch (Exception exception) { Console.WriteLine(exception); throw; } }
public async Task GenerateAsync() { //var httpClient = new System.Net.Http.HttpClient(); //string content = await httpClient.GetStringAsync("https://qa.trunovate.com/entitymanager/swagger/1.1.0.0/swagger.json"); string content = File.ReadAllText(Swagger); var dir = Path.GetFullPath(Output); var fileSink = new FileSink(dir); var document = await SwaggerDocument.FromJsonAsync(content); var settings = new SwaggerToCSharpClientGeneratorSettings { CSharpGeneratorSettings = { TemplateFactory = new SwaggerTemplateFactory(document, fileSink, Subsystem, ServiceName) } }; var generator = new SwaggerToCSharpClientGenerator(document, settings); _ = generator.GenerateFile(); Console.WriteLine(dir); }
public static async Task Main(string[] args) { var document = await SwaggerDocument.FromUrlAsync("http://localhost:49530/swagger/docs/v1"); var settings = new SwaggerToCSharpClientGeneratorSettings { ClassName = "CarClient", CSharpGeneratorSettings = { Namespace = "Example" } }; var generator = new SwaggerToCSharpClientGenerator(document, settings); var code = generator.GenerateFile(); var clientFilePath = Path.Combine(Assembly.GetExecutingAssembly().Location, "../../../CarClient.cs"); if (!File.Exists(clientFilePath)) { File.Create(clientFilePath); } using (var tw = new StreamWriter(clientFilePath, false)) { await tw.WriteAsync(code).ConfigureAwait(false); } }
private static void BuildAssemblySingleClientFromOpId(SwaggerDocument document, string location, AssemblyName name, string nameSpace, ref string typeName, ConnectionProperties props) { typeName = "Client"; var settings = new SwaggerToCSharpClientGeneratorSettings { GenerateClientClasses = true, GenerateOptionalParameters = true, ClassName = "{controller}Client", OperationNameGenerator = new SingleClientFromOperationIdOperationNameGenerator(), CSharpGeneratorSettings = { Namespace = nameSpace }, }; if (props.InjectHttpClient) { settings.DisposeHttpClient = false; settings.ClientBaseClass = nameSpace + ".MyClient"; settings.UseHttpClientCreationMethod = true; settings.DisposeHttpClient = props.DisposeHttpClient; } var generator = new SwaggerToCSharpClientGenerator(document, settings); var code = generator.GenerateFile(); code = AddHttpClientInjectCode(code, props, nameSpace); CompilerResults results; var assemblyNames = new List <string>() { "System.dll", "System.Core.dll", "System.Xml.dll", "System.Xml.Linq.dll", "System.Runtime.Serialization.dll", "System.Net.Http.dll", "LINQPad.exe", "System.ComponentModel.DataAnnotations.dll", }; assemblyNames.Add(Path.Combine(location, "Newtonsoft.Json.dll")); using (var codeProvider = new CSharpCodeProvider()) { var options = new CompilerParameters( assemblyNames.ToArray(), name.CodeBase, true); results = codeProvider.CompileAssemblyFromSource(options, code); } if (results.Errors.Count > 0) { throw new Exception ("Cannot compile typed context: " + results.Errors[0].ErrorText + " (line " + results.Errors[0].Line + ")"); } }
public void When_parameters_have_same_name_then_they_are_renamed() { //// Arrange var document = new SwaggerDocument(); document.Paths["foo"] = new SwaggerPathItem { { SwaggerOperationMethod.Get, new SwaggerOperation { Parameters = { new SwaggerParameter { Kind = SwaggerParameterKind.Query, Name = "foo" }, new SwaggerParameter { Kind = SwaggerParameterKind.Header, Name = "foo" }, } } } }; //// Act var generator = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings()); var code = generator.GenerateFile(); //// Assert Assert.IsTrue(code.Contains("FooAsync(object fooQuery, object fooHeader, System.Threading.CancellationToken cancellationToken)")); }
public async Task <string> RunAsync() { return(await Task.Run(() => { var clientGenerator = new SwaggerToCSharpClientGenerator(InputSwaggerService, Settings); return clientGenerator.GenerateFile(); })); }
private void GenerateContracts(Dictionary <string, string> result, SwaggerToCSharpClientGenerator clientGenerator) { var savedNamespace = Settings.CSharpGeneratorSettings.Namespace; Settings.CSharpGeneratorSettings.Namespace = ContractsNamespace; result[ContractsOutputFilePath ?? "Contracts"] = clientGenerator.GenerateFile(ClientGeneratorOutputType.Contracts); Settings.CSharpGeneratorSettings.Namespace = savedNamespace; }
private void GenerateImplementation(Dictionary <string, string> result, SwaggerToCSharpClientGenerator clientGenerator) { var savedAdditionalNamespaceUsages = Settings.AdditionalNamespaceUsages?.ToArray(); Settings.AdditionalNamespaceUsages = Settings.AdditionalNamespaceUsages?.Concat(new[] { ContractsNamespace }).ToArray() ?? new[] { ContractsNamespace }; result[OutputFilePath ?? "Implementation"] = clientGenerator.GenerateFile(ClientGeneratorOutputType.Implementation); Settings.AdditionalNamespaceUsages = savedAdditionalNamespaceUsages; }
public string Gen(SwaggerDocument service, SwaggerToolSettings setting) { var settings = new SwaggerToCSharpClientGeneratorSettings() { ClassName = setting.CSharpGen.ClassName, CSharpGeneratorSettings = { Namespace = setting.CSharpGen.Namespace } }; var generator = new SwaggerToCSharpClientGenerator(service, settings); var code = generator.GenerateFile(); return(code); }
public async Task When_operation_is_HTTP_head_then_no_content_is_not_used() { //// Arrange var generator = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings()); var document = await generator.GenerateForControllerAsync <HeadRequestController>(); //// Act var codeGen = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings()); var code = codeGen.GenerateFile(); //// Assert Assert.IsFalse(code.Contains("System.Net.Http.StringContent")); }
public async Task GenerateCSharp() { var document = await GetSwaggerDocument(); var settings = new SwaggerToCSharpClientGeneratorSettings() { GenerateSyncMethods = true }; var generator = new SwaggerToCSharpClientGenerator(document, settings); File.WriteAllText(CSharpPath, generator.GenerateFile()); }
public async Task When_code_is_generated_then_by_default_the_system_httpclient_is_used() { //// Arrange var swaggerGenerator = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings()); var document = await swaggerGenerator.GenerateForControllerAsync <FooController>(); var generator = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings()); //// Act var code = generator.GenerateFile(); //// Assert Assert.Contains("var client_ = new System.Net.Http.HttpClient();", code); }
public async Task When_parameter_name_is_reserved_keyword_then_it_is_appended_with_at() { //// Arrange var swaggerGenerator = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings()); var document = await swaggerGenerator.GenerateForControllerAsync <FooController>(); var generator = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings()); //// Act var code = generator.GenerateFile(); //// Assert Assert.Contains("Task<object> GetPersonAsync(bool? @override, ", code); }
public async Task GenerateCSharp() { var document = await GetSwaggerDocument(); var settings = new SwaggerToCSharpClientGeneratorSettings() { GenerateSyncMethods = true, }; var generator = new SwaggerToCSharpClientGenerator(document, settings); Context.ReturnFile(Encoding.UTF8.GetBytes(generator.GenerateFile()), "ApiClient.cs", "text/plain"); //File.WriteAllText(CSharpPath, generator.GenerateFile()); }
private static void BuildAssemblyMultiClientFromOpId(SwaggerDocument document, string location, AssemblyName name, string nameSpace, ref string typeName) { typeName = "Api"; var settings = new SwaggerToCSharpClientGeneratorSettings { ClassName = "{controller}Client", OperationNameGenerator = new MultipleClientsFromOperationIdOperationNameGenerator(), // this is default CSharpGeneratorSettings = { Namespace = nameSpace }, }; var generator = new SwaggerToCSharpClientGenerator(document, settings); var code = generator.GenerateFile(); code = code.Replace(nameSpace + "\n{", nameSpace + "\n{" + " public class " + typeName + "{ "); code += " }"; CompilerResults results; var assemblyNames = new List <string>() { "System.dll", "System.Core.dll", "System.Xml.dll", "System.Runtime.Serialization.dll", "System.Net.Http.dll", "System.ComponentModel.DataAnnotations.dll", }; assemblyNames.Add(Path.Combine(location, "Newtonsoft.Json.dll")); using (var codeProvider = new CSharpCodeProvider(new Dictionary <string, string>() { { "CompilerVersion", "v4.0" } })) { var options = new CompilerParameters( assemblyNames.ToArray(), name.CodeBase, true); results = codeProvider.CompileAssemblyFromSource(options, code); } if (results.Errors.Count > 0) { throw new Exception ("Cannot compile typed context: " + results.Errors[0].ErrorText + " (line " + results.Errors[0].Line + ")"); } }
public async Task When_action_has_file_parameter_then_Stream_is_generated_in_CSharp_code() { //// Arrange var generator = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings()); var document = await generator.GenerateForControllerAsync <FileUploadController>(); //// Act var codeGen = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings()); var code = codeGen.GenerateFile(); //// Assert Assert.IsTrue(code.Contains("FileParameter file")); Assert.IsTrue(code.Contains("var content_ = new System.Net.Http.MultipartFormDataContent(boundary_);")); Assert.IsTrue(code.Contains("content_.Add(new System.Net.Http.StreamContent(file.Data), \"file\"")); }
public async Task When_body_is_xml_then_correct_csharp_is_generated() { //// Arrange var generator = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings()); var document = await generator.GenerateForControllerAsync <MyXmlController>(); //// Act var gen = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings()); var code = gen.GenerateFile(); //// Assert Assert.IsTrue(code.Contains("(string xmlDocument, ")); Assert.IsTrue(code.Contains("var content_ = new System.Net.Http.StringContent(xmlDocument);")); Assert.IsTrue(code.Contains("content_.Headers.ContentType.MediaType = \"application/xml\";")); }
public void When_action_has_file_parameter_then_Stream_is_generated_in_CSharp_code() { //// Arrange var generator = new SwaggerGenerators.WebApi.WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings()); var service = generator.GenerateForController <FileUploadController>(); //// Act var codeGen = new SwaggerToCSharpClientGenerator(service, new SwaggerToCSharpClientGeneratorSettings()); var code = codeGen.GenerateFile(); //// Assert Assert.IsTrue(code.Contains("FileParameter file")); Assert.IsTrue(code.Contains("var content_ = new MultipartFormDataContent();")); Assert.IsTrue(code.Contains("content_.Add(new StreamContent(file.Data), \"file\"")); }
public async Task When_body_is_binary_then_stream_is_used_as_parameter_in_CSharp() { var yaml = @"openapi: 3.0.0 servers: - url: https://www.example.com/ info: version: '2.0.0' title: 'Test API' paths: /files: post: tags: - Files summary: 'Add File' operationId: addFile responses: '200': content: application/json: schema: $ref: '#/components/schemas/FileToken' requestBody: content: image/png: schema: type: string format: binary components: schemas: FileToken: type: object required: - fileId properties: fileId: type: string format: uuid"; var document = await SwaggerYamlDocument.FromYamlAsync(yaml); //// Act var codeGenerator = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings()); var code = codeGenerator.GenerateFile(); //// Assert Assert.Contains("public async System.Threading.Tasks.Task<FileToken> AddFileAsync(System.IO.Stream body, System.Threading.CancellationToken cancellationToken)", code); Assert.Contains("var content_ = new System.Net.Http.StreamContent(body);", code); }
public async static Task <string> GenerateFromUrl(string url, string namespaceName, string className) { var document = await SwaggerDocument.FromUrlAsync(url); var settings = new SwaggerToCSharpClientGeneratorSettings { ClassName = className, CSharpGeneratorSettings = { Namespace = namespaceName } }; var generator = new SwaggerToCSharpClientGenerator(document, settings); return(generator.GenerateFile()); }
public async Task When_setting_is_enabled_with_enum_fromuri_should_make_enum_nullable() { //// Arrange var generator = new WebApiToSwaggerGenerator(new WebApiAssemblyToSwaggerGeneratorSettings()); var document = await generator.GenerateForControllerAsync <TestController>(); //// Act var codeGenerator = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings { GenerateOptionalParameters = true }); var code = codeGenerator.GenerateFile(); //// Assert Assert.IsFalse(code.Contains("TestWithEnumAsync(MyEnum myEnum = null)")); Assert.IsTrue(code.Contains("TestWithEnumAsync(MyEnum? myEnum = null)")); }
public void When_form_parameters_are_defined_then_FormUrlEncodedContent_is_generated() { //// Arrange var document = new SwaggerDocument(); document.Paths["foo/bar"] = new SwaggerPathItem { { SwaggerOperationMethod.Post, new SwaggerOperation { Consumes = new System.Collections.Generic.List <string> { "application/x-www-form-urlencoded" }, Parameters = { new SwaggerParameter { Name = "foo", IsRequired = false, IsNullableRaw = true, Kind = SwaggerParameterKind.FormData, Type = JsonObjectType.String }, new SwaggerParameter { Name = "bar", IsRequired = true, IsNullableRaw = false, Kind = SwaggerParameterKind.FormData, Type = JsonObjectType.String } } } } }; //// Act var generator = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings()); var code = generator.GenerateFile(); //// Assert Assert.Contains("new System.Net.Http.FormUrlEncodedContent", code); Assert.Contains("if (foo != null)", code); Assert.Contains("throw new System.ArgumentNullException(\"bar\");", code); }
public async Task When_setting_is_enabled_then_optional_parameters_have_null_optional_value() { //// Arrange var generator = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings()); var document = await generator.GenerateForControllerAsync <TestController>(); //// Act var codeGenerator = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings { GenerateOptionalParameters = true }); var code = codeGenerator.GenerateFile(); //// Assert Assert.IsTrue(code.Contains("TestAsync(string a, string b, string c = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))")); Assert.IsFalse(code.Contains("TestAsync(string a, string b, string c)")); }
public async Task When_setting_is_enabled_with_class_fromuri_should_make_enum_nullable() { //// Arrange var generator = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings()); var document = await generator.GenerateForControllerAsync <TestController>(); //// Act var codeGenerator = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings { GenerateOptionalParameters = true }); var code = codeGenerator.GenerateFile(); //// Assert Assert.IsFalse(code.Contains("TestWithClassAsync(string myString = null, MyEnum myEnum = null, int? myInt = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))")); Assert.IsTrue(code.Contains("TestWithClassAsync(string myString = null, MyEnum? myEnum = null, int? myInt = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))")); }
public async Task When_response_is_file_and_stream_is_not_used_then_byte_array_is_returned() { //// Arrange var swaggerGenerator = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings()); var document = await swaggerGenerator.GenerateForControllerAsync <FileDownloadController>(); //// Act var codeGen = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings { GenerateClientInterfaces = true }); var code = codeGen.GenerateFile(); //// Assert Assert.Contains("System.Threading.Tasks.Task<FileResponse> DownloadFileAsync();", code); Assert.Contains("ReadAsStreamAsync()", code); }
public async Task When_custom_http_client_type_is_specified_then_an_instance_of_that_type_is_used() { //// Arrange var swaggerGenerator = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings()); var document = await swaggerGenerator.GenerateForControllerAsync <FooController>(); var generator = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings { HttpClientType = "CustomNamespace.CustomHttpClient" }); //// Act var code = generator.GenerateFile(); //// Assert Assert.Contains("var client_ = new CustomNamespace.CustomHttpClient();", code); }
public async Task When_success_responses_are_wrapped_then_SwaggerResponse_is_returned() { //// Arrange var swaggerGen = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings()); var document = await swaggerGen.GenerateForControllerAsync <TestController>(); //// Act var codeGen = new SwaggerToCSharpClientGenerator(document, new SwaggerToCSharpClientGeneratorSettings { WrapResponses = true }); var code = codeGen.GenerateFile(); //// Assert Assert.IsTrue(code.Contains("Task<SwaggerResponse<string>>")); Assert.IsTrue(code.Contains("Task<SwaggerResponse>")); }