In this release, we have improved the code quality of our generated C# code samples by making them idiomatic.
Detailsโ
This release introduces significant improvements to the code samples provided for your API. We have made several updates to the code samples to ensure that they are up-to-date, easier to understand, and more user-friendly. The new code samples are designed to help developers get started with their API quickly and easily, without having to spend a lot of time reading documentation or trying to figure out how to use the API.
What Has Changed?โ
The code samples are refactored and reformatted to improve the code quality and make them style-compliant using the Dotnet code analyzer. The used ".editorconfig" is publicly available here. Other changes made to the generated code samples are listed below.
- Added in-line parameter initialization.
- Added support for multidimensional array.
- Added comments and explanations to the code samples to provide more context and help developers understand how to use the API.
- Fixed bugs and errors in the code samples to ensure that they work as expected.
Imports Section Improvementsโ
Imports have been sorted in alphabetical order and empty lines have been removed to fix identified lint issues.
- Before
- After
using System;
using System.IO;
using System.Collections.Generic;
using System.Globalization;
using System.Threading.Tasks;
using Tester.Standard;
using Tester.Standard.Models;
using Tester.Standard.Controllers;
using Tester.Standard.Utilities;
using Tester.Standard.Exceptions;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Threading.Tasks;
using Tester.Standard.Controllers;
using Tester.Standard.Exceptions;
using Tester.Standard.Models;
using Tester.Standard.Utilities;
Parameters Initialization Section Improvementsโ
The explicit type parameter declaration and in-line initialization have been added to ensure the code samples are easier to understand and more user-friendly.
Model Initializationโ
- Before
- After
var employeeModel = new Employee();
employeeModel.Name = "John Doe";
employeeModel.Salary = 4200;
employeeModel.Boss = new Person();
employeeModel.Boss.Name = "Jane Doe";
employeeModel.Boss.Age = 45;
Employee employeeModel = new Employee
{
Name = "John Doe",
Salary = 4200,
Boss = new Person
{
Name = "Jane Doe",
Age = 45,
},
};
Array Initializationโ
- Before
- After
var numberArray = new List<int>();
numberArray.Add(210);
numberArray.Add(211);
numberArray.Add(212);
List<int> numberArray = new List<int>
{
210,
211,
212,
}
Map Initializationโ
- Before
- After
var numberMap = new Dictionary<string, int>();
numberMap.Add("key0", 110);
numberMap.Add("key1", 111);
numberMap.Add("key2", 112);
Dictionary<string, int> numberMap = new Dictionary<string, int>
{
["key0"] = 110,
["key1"] = 111,
["key2"] = 112,
};
Multidimensional Array Initializationโ
The missing support multidimensional array of primitive and non-primitive types in C# code samples has been added.
List<List<int>> numbers2dArray = new List<List<int>>
{
new List<int>
{
158,
159,
},
new List<int>
{
256,
257,
},
};
API Call Section Improvementsโ
The code block is reformatted and comments are added to provide more context and help developers understand how to use the API.
- Before
- After
try
{
List<ServerResponse> result = await responseTypesController.SendAsync(model);
}
catch (ApiException e){};
try
{
List<ServerResponse> result = await responseTypesController.SendAsync(model);
}
catch (ApiException e)
{
// TODO: Handle exception here
Console.WriteLine(e.Message);
}
A Comparison of Complete Example Code Sampleโ
The following code shows the complete comparison between the code sample generation for initializing an employee model as an input parameter for ResponseTypesController Send endpoint.
Employee Modelโ
"employee_model": {
"name": "John Doe",
"salary": 4200,
"boss": {
"name": "Jane Doe",
"age": 45,
}
}
Generated code samplesโ
- Before
- After
using System;
using System.IO;
using System.Collections.Generic;
using System.Globalization;
using System.Threading.Tasks;
using Tester.Standard;
using Tester.Standard.Models;
using Tester.Standard.Controllers;
using Tester.Standard.Utilities;
using Tester.Standard.Exceptions;
namespace Testing
{
class Program
{
static async Task Main(string[] args)
{
TesterClient client = new TesterClient.Builder()
.Suites(SuiteCode.Hearts)
.Build();
IResponseTypesController responseTypesController = client.ResponseTypesController;
var employeeModel = new Employee();
employeeModel.Name = "John Doe";
employeeModel.Salary = 4200;
employeeModel.Boss = new Person();
employeeModel.Boss.Name = "Jane Doe";
employeeModel.Boss.Age = 45;
try
{
List<ServerResponse> result = await responseTypesController.SendAsync(employeeModel);
}
catch (ApiException e){};
}
}
}
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Threading.Tasks;
using Tester.Standard.Controllers;
using Tester.Standard.Exceptions;
using Tester.Standard.Models;
using Tester.Standard.Utilities;
namespace Testing
{
public class Program
{
public static async Task Main()
{
TesterClient client = new TesterClient.Builder()
.Suites(SuiteCode.Hearts)
.Build();
IResponseTypesController responseTypesController = client.ResponseTypesController;
Employee employeeModel = new Employee
{
Name = "John Doe",
Salary = 4200,
Boss = new Person
{
Name = "Jane Doe",
Age = 45,
},
};
try
{
List<ServerResponse> result = await responseTypesController.SendAsync(employeeModel);
}
catch (ApiException e)
{
// TODO: Handle exception here
Console.WriteLine(e.Message);
}
}
}
}
Bugs Fixedโ
- Fixed an issue with DateTime initialization for
Rfc1123
,Rfc3339
andUnix Timestamp
formats. - Fixed an issue where generated client initialization code block was uncompilable in the case of Basic Authentication.
- Fixed an issue where the
HttpClientConfig
block was added to generated client initialization even if it was not configured.