Skip to content

Commit 0e5f42b

Browse files
feat(csharp): Add WithHTTPInfo method derivatives (#5715)
1 parent 4083942 commit 0e5f42b

File tree

2 files changed

+139
-0
lines changed

2 files changed

+139
-0
lines changed

clients/algoliasearch-client-csharp/algoliasearch/Transport/HttpTransport.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,12 @@ private async Task<TResult> ExecuteRequestAsync<TResult, TData>(
180180
response.Body.Seek(0, SeekOrigin.Begin);
181181
}
182182

183+
// Returns the raw response when using `*WithHTTPInfo` methods.
184+
if (typeof(TResult) == typeof(AlgoliaHttpResponse))
185+
{
186+
return response as TResult;
187+
}
188+
183189
var deserialized = await _serializer
184190
.Deserialize<TResult>(response.Body)
185191
.ConfigureAwait(false);

templates/csharp/api.mustache

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,51 @@ namespace Algolia.Search.Clients;
7474
{{/isDeprecated}}
7575
{{^returnType}}void{{/returnType}}{{#returnType}}{{> return_type}}{{/returnType}} {{operationId}}{{#returnType}}{{#vendorExtensions.x-is-generic}}<T>{{/vendorExtensions.x-is-generic}}{{/returnType}}({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = default{{/optionalMethodArgument}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#allParams.0}}, {{/allParams.0}}RequestOptions options = null, CancellationToken cancellationToken = default);
7676

77+
/// <summary>
78+
/// {{{notes}}}
79+
/// </summary>{{#vendorExtensions}}{{#x-acl.0}}
80+
///
81+
/// Required API Key ACLs:{{/x-acl.0}}
82+
{{#x-acl}}
83+
/// - {{.}}
84+
{{/x-acl}}
85+
{{/vendorExtensions}}
86+
{{#allParams}}
87+
/// <param name="{{paramName}}">{{{description}}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}</param>
88+
{{/allParams}}
89+
/// <param name="options">Add extra http header or query parameters to Algolia.</param>
90+
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
91+
/// <exception cref="ArgumentException">Thrown when arguments are not correct</exception>
92+
/// <exception cref="Algolia.Search.Exceptions.AlgoliaApiException">Thrown when the API call was rejected by Algolia</exception>
93+
/// <exception cref="Algolia.Search.Exceptions.AlgoliaUnreachableHostException">Thrown when the client failed to call the endpoint</exception>
94+
/// <returns>Task of {{> return_type_doc}}</returns>
95+
{{#isDeprecated}}
96+
[Obsolete]
97+
{{/isDeprecated}}
98+
Task<AlgoliaHttpResponse> {{operationId}}WithHTTPInfoAsync({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = default{{/optionalMethodArgument}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#allParams.0}}, {{/allParams.0}}RequestOptions options = null, CancellationToken cancellationToken = default);
99+
100+
/// <summary>
101+
/// {{{notes}}} (Synchronous version)
102+
/// </summary>{{#vendorExtensions}}{{#x-acl.0}}
103+
///
104+
/// Required API Key ACLs:{{/x-acl.0}}
105+
{{#x-acl}}
106+
/// - {{.}}
107+
{{/x-acl}}
108+
{{/vendorExtensions}}
109+
{{#allParams}}
110+
/// <param name="{{paramName}}">{{{description}}}{{^required}} (optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}</param>
111+
{{/allParams}}
112+
/// <param name="options">Add extra http header or query parameters to Algolia.</param>
113+
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
114+
/// <exception cref="ArgumentException">Thrown when arguments are not correct</exception>
115+
/// <exception cref="Algolia.Search.Exceptions.AlgoliaApiException">Thrown when the API call was rejected by Algolia</exception>
116+
/// <exception cref="Algolia.Search.Exceptions.AlgoliaUnreachableHostException">Thrown when the client failed to call the endpoint</exception>
117+
/// <returns>{{> return_type_doc}}</returns>
118+
{{#isDeprecated}}
119+
[Obsolete]
120+
{{/isDeprecated}}
121+
AlgoliaHttpResponse {{operationId}}WithHTTPInfo({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = default{{/optionalMethodArgument}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#allParams.0}}, {{/allParams.0}}RequestOptions options = null, CancellationToken cancellationToken = default);
77122
{{/operation}}
78123
}
79124

@@ -288,6 +333,94 @@ namespace Algolia.Search.Clients;
288333
public {{^returnType}}void{{/returnType}}{{#returnType}}{{> return_type}}{{/returnType}} {{operationId}}{{#vendorExtensions.x-is-generic}}<T>{{/vendorExtensions.x-is-generic}}({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = default{{/optionalMethodArgument}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#allParams.0}}, {{/allParams.0}}RequestOptions options = null, CancellationToken cancellationToken = default) =>
289334
AsyncHelper.RunSync(() => {{operationId}}Async{{#vendorExtensions.x-is-generic}}<T>{{/vendorExtensions.x-is-generic}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#allParams.0}}, {{/allParams.0}} options, cancellationToken));
290335

336+
/// <inheritdoc />
337+
{{#isDeprecated}}
338+
[Obsolete]
339+
{{/isDeprecated}}
340+
public async Task<AlgoliaHttpResponse>{{operationId}}WithHTTPInfoAsync({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = default{{/optionalMethodArgument}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#allParams.0}}, {{/allParams.0}}RequestOptions options = null, CancellationToken cancellationToken = default)
341+
{
342+
{{#allParams}}
343+
{{#required}}
344+
{{^vendorExtensions.x-csharp-value-type}}{{^isEnumRef}}
345+
if ({{paramName}} == null)
346+
throw new ArgumentException("Parameter `{{paramName}}` is required when calling `{{operationId}}`.");
347+
{{/isEnumRef}}{{/vendorExtensions.x-csharp-value-type}}
348+
{{/required}}
349+
{{/allParams}}
350+
var requestOptions = new InternalRequestOptions(options);
351+
{{#vendorExtensions.x-is-custom-request}}
352+
{{#pathParams}}
353+
requestOptions.CustomPathParameters.Add("{{baseName}}", QueryStringHelper.ParameterToString({{paramName}}));
354+
{{/pathParams}}
355+
{{/vendorExtensions.x-is-custom-request}}
356+
{{#vendorExtensions}}{{^x-is-custom-request}}
357+
{{#pathParams}}
358+
{{#required}}
359+
requestOptions.PathParameters.Add("{{baseName}}", QueryStringHelper.ParameterToString({{paramName}}));
360+
{{/required}}
361+
{{^required}}
362+
if ({{paramName}} != null)
363+
{
364+
requestOptions.PathParameters.Add("{{baseName}}", QueryStringHelper.ParameterToString({{paramName}}));
365+
}
366+
{{/required}}
367+
{{/pathParams}}
368+
{{/x-is-custom-request}}{{/vendorExtensions}}
369+
{{#vendorExtensions.x-is-custom-request}}
370+
{{#queryParams}}
371+
requestOptions.AddCustomQueryParameters({{paramName}});
372+
{{/queryParams}}
373+
{{/vendorExtensions.x-is-custom-request}}
374+
{{^vendorExtensions.x-is-custom-request}}
375+
{{#queryParams}}
376+
requestOptions.AddQueryParameter("{{baseName}}", {{paramName}});
377+
{{/queryParams}}
378+
{{/vendorExtensions.x-is-custom-request}}
379+
{{#headerParams}}
380+
{{#required}}
381+
requestOptions.HeaderParameters.Add("{{baseName}}".ToLowerInvariant(), QueryStringHelper.ParameterToString({{paramName}})); // header parameter
382+
{{/required}}
383+
{{^required}}
384+
if ({{paramName}} != null)
385+
{
386+
requestOptions.HeaderParameters.Add("{{baseName}}".ToLowerInvariant(), QueryStringHelper.ParameterToString({{paramName}})); // header parameter
387+
}
388+
{{/required}}
389+
{{/headerParams}}
390+
{{#formParams}}
391+
{{#required}}
392+
requestOptions.FormParameters.Add("{{baseName}}", QueryStringHelper.ParameterToString({{paramName}})); // form parameter
393+
{{/required}}
394+
{{^required}}
395+
if ({{paramName}} != null)
396+
{
397+
requestOptions.FormParameters.Add("{{baseName}}", QueryStringHelper.ParameterToString({{paramName}})); // form parameter
398+
}
399+
{{/required}}
400+
{{/formParams}}
401+
{{#bodyParam}}
402+
requestOptions.Data = {{paramName}};
403+
{{/bodyParam}}
404+
{{#vendorExtensions}}
405+
{{#x-use-read-transporter}}
406+
requestOptions.UseReadTransporter = true;
407+
{{/x-use-read-transporter}}
408+
{{#vendorExtensions.x-timeouts}}
409+
requestOptions.ReadTimeout ??= TimeSpan.FromMilliseconds({{read}});
410+
requestOptions.WriteTimeout ??= TimeSpan.FromMilliseconds({{write}});
411+
requestOptions.ConnectTimeout ??= TimeSpan.FromMilliseconds({{connect}});
412+
{{/vendorExtensions.x-timeouts}}
413+
{{/vendorExtensions}}
414+
return await _transport.ExecuteRequestAsync<AlgoliaHttpResponse>(new HttpMethod("{{httpMethod}}"),"{{{path}}}", requestOptions, cancellationToken).ConfigureAwait(false);
415+
}
416+
417+
/// <inheritdoc />
418+
{{#isDeprecated}}
419+
[Obsolete]
420+
{{/isDeprecated}}
421+
public AlgoliaHttpResponse {{operationId}}WithHTTPInfo({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = default{{/optionalMethodArgument}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#allParams.0}}, {{/allParams.0}}RequestOptions options = null, CancellationToken cancellationToken = default) =>
422+
AsyncHelper.RunSync(() => {{operationId}}WithHTTPInfoAsync{{#vendorExtensions.x-is-generic}}{{/vendorExtensions.x-is-generic}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#allParams.0}}, {{/allParams.0}} options, cancellationToken));
423+
291424
{{/supportsAsync}}
292425
{{/operation}}
293426
}

0 commit comments

Comments
 (0)