Skip to content

Commit 31c6a0a

Browse files
author
Fredrik Gustafsson
committed
Extended the api-class generation by a interface generation
1 parent a1f156c commit 31c6a0a

File tree

2 files changed

+55
-24
lines changed

2 files changed

+55
-24
lines changed

modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ using System.IO;
44
using System.Linq;
55
using System.Net;
66
using System.Text;
7+
using System.Threading.Tasks;
78
using Newtonsoft.Json;
89
using RestSharp;
910

@@ -36,7 +37,16 @@ namespace {{invokerPackage}} {
3637

3738
private Dictionary<String, String> defaultHeaderMap = new Dictionary<String, String>();
3839

39-
public Object CallApi(String Path, RestSharp.Method Method, Dictionary<String, String> QueryParams, String PostBody,
40+
public Object CallApi(String Path, RestSharp.Method Method, Dictionary<String, String> QueryParams, String PostBody,
41+
Dictionary<String, String> HeaderParams, Dictionary<String, String> FormParams, Dictionary<String, String> FileParams, String[] AuthSettings) {
42+
var response = Task.Run(async () => {
43+
var resp = await CallApiAsync(Path, Method, QueryParams, PostBody, HeaderParams, FormParams, FileParams, AuthSettings);
44+
return resp;
45+
});
46+
return response.Result;
47+
}
48+
49+
public async Task<Object> CallApiAsync(String Path, RestSharp.Method Method, Dictionary<String, String> QueryParams, String PostBody,
4050
Dictionary<String, String> HeaderParams, Dictionary<String, String> FormParams, Dictionary<String, String> FileParams, String[] AuthSettings) {
4151
4252
var request = new RestRequest(Path, Method);
@@ -67,7 +77,7 @@ namespace {{invokerPackage}} {
6777
request.AddParameter("application/json", PostBody, ParameterType.RequestBody); // http body (model) parameter
6878
}
6979

70-
return (Object)restClient.Execute(request);
80+
return (Object) await restClient.ExecuteTaskAsync(request);
7181

7282
}
7383

modules/swagger-codegen/src/main/resources/csharp/api.mustache

Lines changed: 43 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,30 @@ using {{modelPackage}};
99

1010
namespace {{package}} {
1111
{{#operations}}
12+
13+
public interface I{{classname}} {
14+
{{#operation}}
15+
/// <summary>
16+
/// {{summary}} {{notes}}
17+
/// </summary>
18+
{{#allParams}}/// <param name="{{paramName}}">{{description}}</param>{{/allParams}}
19+
/// <returns>{{#returnType}}{{{returnType}}}{{/returnType}}</returns>
20+
{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
21+
22+
/// <summary>
23+
/// {{summary}} {{notes}}
24+
/// </summary>
25+
{{#allParams}}/// <param name="{{paramName}}">{{description}}</param>{{/allParams}}
26+
/// <returns>{{#returnType}}{{{returnType}}}{{/returnType}}</returns>
27+
{{#returnType}}Task<{{{returnType}}}>{{/returnType}}{{^returnType}}Task{{/returnType}} {{nickname}}Async ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
28+
{{/operation}}
29+
}
30+
1231
/// <summary>
1332
/// Represents a collection of functions to interact with the API endpoints
1433
/// </summary>
15-
public class {{classname}} {
34+
public class {{classname}} : I{{classname}} {
35+
1636
/// <summary>
1737
/// Initializes a new instance of the <see cref="{{classname}}"/> class.
1838
/// </summary>
@@ -62,8 +82,7 @@ namespace {{package}} {
6282
/// <summary>
6383
/// {{summary}} {{notes}}
6484
/// </summary>
65-
{{#allParams}} /// <param name="{{paramName}}">{{description}}</param>
66-
{{/allParams}}
85+
{{#allParams}}/// <param name="{{paramName}}">{{description}}</param>{{/allParams}}
6786
/// <returns>{{#returnType}}{{{returnType}}}{{/returnType}}</returns>
6887
public {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) {
6988
@@ -108,38 +127,40 @@ namespace {{package}} {
108127
/// <summary>
109128
/// {{summary}} {{notes}}
110129
/// </summary>
111-
{{#allParams}} /// <param name="{{paramName}}">{{description}}</param>
112-
{{/allParams}}
130+
{{#allParams}}/// <param name="{{paramName}}">{{description}}</param>{{/allParams}}
113131
/// <returns>{{#returnType}}{{{returnType}}}{{/returnType}}</returns>
114132
public async {{#returnType}}Task<{{{returnType}}}>{{/returnType}}{{^returnType}}Task{{/returnType}} {{nickname}}Async ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) {
115133
116-
var _request = new RestRequest("{{path}}", Method.{{httpMethod}});
117-
118134
{{#allParams}}{{#required}}
119-
// verify the required parameter '{{paramName}}' is set
120-
if ({{paramName}} == null) throw new ApiException(400, "Missing required parameter '{{paramName}}' when calling {{nickname}}");
135+
// verify the required parameter '{{paramName}}' is set
136+
if ({{paramName}} == null) throw new ApiException(400, "Missing required parameter '{{paramName}}' when calling {{nickname}}");
121137
{{/required}}{{/allParams}}
122138

123-
// add default header, if any
124-
foreach(KeyValuePair<string, string> defaultHeader in ApiInvoker.GetDefaultHeader())
125-
{
126-
_request.AddHeader(defaultHeader.Key, defaultHeader.Value);
127-
}
128-
129-
_request.AddUrlSegment("format", "json"); // set format to json by default
130-
{{#pathParams}}_request.AddUrlSegment("{{baseName}}", ApiInvoker.ParameterToString({{{paramName}}})); // path (url segment) parameter
139+
var path = "{{path}}";
140+
path = path.Replace("{format}", "json");
141+
{{#pathParams}}path = path.Replace("{" + "{{baseName}}" + "}", apiClient.ParameterToString({{{paramName}}}));
131142
{{/pathParams}}
132-
{{#queryParams}} if ({{paramName}} != null) _request.AddParameter("{{baseName}}", ApiInvoker.ParameterToString({{paramName}})); // query parameter
143+
144+
var queryParams = new Dictionary<String, String>();
145+
var headerParams = new Dictionary<String, String>();
146+
var formParams = new Dictionary<String, String>();
147+
var fileParams = new Dictionary<String, String>();
148+
String postBody = null;
149+
150+
{{#queryParams}} if ({{paramName}} != null) queryParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // query parameter
133151
{{/queryParams}}
134-
{{#headerParams}} if ({{paramName}} != null) _request.AddHeader("{{baseName}}", ApiInvoker.ParameterToString({{paramName}})); // header parameter
152+
{{#headerParams}} if ({{paramName}} != null) headerParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // header parameter
135153
{{/headerParams}}
136-
{{#formParams}}if ({{paramName}} != null) {{#isFile}}_request.AddFile("{{baseName}}", {{paramName}});{{/isFile}}{{^isFile}}_request.AddParameter("{{baseName}}", ApiInvoker.ParameterToString({{paramName}})); // form parameter{{/isFile}}
154+
{{#formParams}}if ({{paramName}} != null) {{#isFile}}fileParams.Add("{{baseName}}", {{paramName}});{{/isFile}}{{^isFile}}formParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // form parameter{{/isFile}}
137155
{{/formParams}}
138-
{{#bodyParam}}_request.AddParameter("application/json", ApiInvoker.Serialize({{paramName}}), ParameterType.RequestBody); // http body (model) parameter
156+
{{#bodyParam}}postBody = apiClient.Serialize({{paramName}}); // http body (model) parameter
139157
{{/bodyParam}}
140158

159+
// authentication setting, if any
160+
String[] authSettings = new String[] { {{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}} };
161+
141162
// make the HTTP request
142-
IRestResponse response = await restClient.ExecuteTaskAsync(_request);
163+
IRestResponse response = (IRestResponse) await apiClient.CallApiAsync(path, Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
143164
if (((int)response.StatusCode) >= 400) {
144165
throw new ApiException ((int)response.StatusCode, "Error calling {{nickname}}: " + response.Content);
145166
}

0 commit comments

Comments
 (0)